Можете ли вы узнать, какой компилятор использовался для компиляции программы? - PullRequest
18 голосов
/ 06 марта 2009

При наличии исполняемого файла, скомпилированного из C для запуска в Solaris, возможно ли определить, какой компилятор использовался для компиляции связанного неполного исполняемого файла?

Я не вижу ничего, когда использую ни строки, ни команду file, и волшебство, похоже, не содержит ничего особенного.

Компиляторы обычно помещают отпечаток в свои исполняемые файлы вывода?

ура

Ответы [ 7 ]

6 голосов
/ 06 марта 2009

Да, МАР отлично подходит для этого. Он использует технологию под названием FLIRT .

4 голосов
/ 06 марта 2009

PEID сделает свое дело. Обычно это работает просто замечательно. Очевидно, что PEID - это инструмент Windows, но он не должен иметь значения и должен показывать компилятору (иногда даже конкретную информацию о версии)

2 голосов
/ 11 января 2011

Если исполняемый файл не удален, попробуйте / usr / ccs / bin mcs-p Это обычно показывает компилятор, компоновщик и все используемые заголовочные файлы

2 голосов
/ 10 марта 2009

Создавайте небольшие тестовые приложения с каждым компилятором, который вы пытаетесь идентифицировать. Затем посмотрите на результаты в шестнадцатеричном редакторе и попробуйте найти шаблоны. Это может оказаться действительно очевидным - например, «Rich» подписи от компоновщика Microsoft.

1 голос
/ 05 марта 2014

Не раздето:

$ cc -O hello.c

$ file a.out

a.out: исполняемый ELF 32-разрядный MSB SPARC32PLUS Версия 1, V8 + Обязательный, динамически связанный, не очищенный

$ strings -a a.out | grep cc

/ opt / solarisstudio12.3 / prod / bin / cc -O hello.c

$ dwarfdump -i a.out | grep compile_o

DW_AT_SUN_compile_options Xa; O; R = Sun C 5.12 SunOS_sparc Patch 148917-07 2013/10/18; бэкэнд; raw; cd;

Stripped:

$ strip a.out

$ file a.out

a.out: исполняемый ELF 32-разрядный MSB SPARC32PLUS Версия 1, V8 + Требуется, динамически связан, удален

$ strings -a a.out | grep cc

(нет)

0 голосов
/ 10 марта 2009

Компиляторы обычно добавляют свою собственную "подпись" в виде открытого текста в скомпилированные файлы. Вы можете использовать инструмент, такой как строки, чтобы найти открытый текст.

0 голосов
/ 06 марта 2009

Visual Studio и GCC обычно следуют различным процедурам запуска (которые вызывают main). Это может быть намек. Я не знаю о других, хотя. Для дллс, я не могу думать о чем-то похожем с моей головы.

...