Как определить, какой компилятор использовался для компиляции исполняемого файла? - PullRequest
32 голосов
/ 29 декабря 2010

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

Ответы [ 4 ]

8 голосов
/ 29 декабря 2010

Есть также старая добрая утилита 'strings'. Сбрасывает все строки ascii-ish, которые он находит в двоичном файле. Разные компиляторы встраивают разные объемы информации в создаваемые ими двоичные файлы, но многие из них на самом деле включают явно идентифицирующие строки.

5 голосов
/ 29 декабря 2010

Многие компиляторы / компоновщики вставляют секцию .comment в выходной файл, который их идентифицирует.Существует также ряд более тонких способов поведения, из которых можно создать отпечатки пальцев компилятора, но я не знаю ни одного существующего инструмента для этого.

Если у вас есть исходный код, самым простым решением будет попытка компиляции с каждым компиляторомдо тех пор, пока вы не получите двоичный файл, который соответствует побайтно (или даже близко).

4 голосов
/ 29 декабря 2010

В некоторых случаях вы можете запустить ldd в двоичном файле и узнать, с какой стандартной библиотекой он связан.Например, в Solaris gcc против Sun CC против чего-либо.

Для кода C ++ вы также можете вывести некоторые символы, найти искаженное имя функции, а затем выяснить, какой деманглер генерирует правильное исходное имя.

2 голосов
/ 29 декабря 2010

Try, IDA Pro , который определяет библиотеки и инструменты, используемые для создания исполняемого файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...