Подтвердить что ты не робот

Как узнать, является ли двоичный файл выпуском или отладкой в ​​win и * nix

Есть ли простая утилита командной строки для проверки двоичных файлов, таких как исполняемые и динамические библиотеки, чтобы определить, являются ли они версиями выпуска или отладки? Есть ли что-нибудь подобное в * nix или windows?

4b9b3361

Ответ 1

  • для С++ на Linux, вы можете сделать:

        objdump --source yourbin |grep printf
    

    Замените printf тем, что вы делаете. Если он отлаживается, он отображает все фактические вызовы исходного кода, которые вы делаете. Если это релиз, он просто отобразит основанный символ из таблицы символов.

  • для С++ на Windows, вы можете использовать файл depend.exe и посмотреть, зависит ли оно от MSVCRT (release) или MSVCRTD (debug)

Ответ 2

В linux вы можете использовать команду "file" даже для динамических библиотек. Если он говорит "раздели", что все отладочные символы удаляются. Если он говорит, что "не лишен", это противоположный

Ответ 3

Для Windows Dependency Walker имеет необязательный вывод cmd-строки, в котором перечислены все DLL-нагрузки exe (и их зависимости). Запустите это через grep и посмотрите, всплывает ли msvcrt-dll с d или нет.

Это работает только при динамической привязке. В противном случае это может быть сложнее.

Возможно, вы можете использовать grep для определенных функций, которые отличаются в debug/release, если эти строки видны в исполняемом файле.

Если ваши приложения не используют время выполнения вообще, это будет довольно сложно.

Ответ 4

Для unix: с помощью исполняемых файлов ELF вы можете использовать objdump или nm для просмотра таблиц символов для исполняемого файла (обратите внимание, что это будет работать намного лучше если он не лишен). Присутствие или отсутствие определенных символов будет указывать на сборку отладки или выпуска. (Что касается того, что, вероятно, зависит от того, какие библиотеки вы используете, и т.д. Вам нужно будет немного подражать, чтобы найти общие, не стесняйтесь предлагать вещи, которые нужно искать в комментариях, и я обновлю ответ.)

Для Windows: предложения зависимого пользователя хороши. Для эквивалентов в командной строке вы можете найти dumpbin в большинстве установок Visual Studio и несколько эквивалент objdump на * nix. Вы также можете найти nm или objdump, например. msys или cygwin, который будет работать с некоторыми файлами exe windows.

Ответ 5

Там не так много. Если вы откроете сборку в Reflector, вы можете найти атрибут сборки:

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.EnableEditAndContinue | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.Default)]

Но, видимо, это тоже добавилось в режим выпуска.

Если это ваша собственная сборка, чем решение, необходимо использовать некоторые препроцессорные директивы.

#ifdef DEBUG
[MyAttribute("foo")]
#endif

edit: Извините, я предположил .NET. Там идет мой молот.

Ответ 6

Чаще всего отладочные версии исполняемых файлов и библиотек связаны с отладочной версией среды выполнения. В Windows есть схема имен для версий debug/release, некоторые из которых следуют из MS. Имя отладочной версии библиотеки должно заканчиваться на d. Вы можете использовать инструмент, например Dependency Walker (http://www.dependencywalker.com), чтобы узнать, от каких библиотек зависит ваш исполняемый файл или библиотека. Если вы обнаружите отладочные версии библиотек времени выполнения, есть большая вероятность, что ваш исполняемый файл или библиотека были созданы в режиме отладки.

Это работает, только если

  • вы можете сказать, посмотрев имя runtime, какая версия (это следует схемам именования, подобным один я описал выше)
  • ваш исполняемый файл/библиотека связана против динамического времени выполнения, не статического один. Во втором случае время выполнения попадает в исполняемый файл/библиотеку и это уже не зависимость
  • вы находитесь в Windows:)

Ответ 7

Вы можете использовать файл file.exe.

filever.exe <my binary file>
--a-- W32i   APP   -         1.0.0.0 shp     25,600 11-03-2013 <my file>

Чтобы получить файл, вы можете загрузить инструменты поддержки для Windows XP.

Если вы перешли на Windows 7 или выше (например, большинство пользователей Windows), вы можете загрузить его, откройте его через winzip.

Затем извлеките файл из файла support.cab.

Он отлично работает для Windows 7.

Ответ 8

Используйте файл depend.exe, чтобы узнать, какая версия. Когда вы откроете файл через зависимый ходок, он отобразит файл, который необходим. Просмотрев список файлов system32, вы можете ли это отлаживать или выпускать