Из скомпилированного файла я могу увидеть, какой компилятор использовался для генерации файла?
Как определить, какой компилятор использовался для компиляции исполняемого файла?
Ответ 1
Там также хорошая старая утилита "струны". Сбрасывает все строки ascii-ish, которые он находит в двоичном формате. Различные компиляторы вставляют разные объемы информации в исполняемые файлы, но многие из них будут включать явно идентифицирующие строки.
Ответ 2
Многие компиляторы/компоновщики вставляют раздел .comment
в выходной файл, который идентифицирует их. Есть также несколько более тонких способов поведения, с которых вы могли бы отпечатать отпечатки компилятора, но я не знаю никаких существующих инструментов для этого.
Если у вас есть источник, самым простым решением будет попытка компиляции с каждым рассматриваемым компилятором, пока вы не получите двоичный файл, который соответствует байтам для байта (или даже близко).
Ответ 3
В некоторых случаях вы можете запустить ldd
в двоичном файле и выяснить, с какой стандартной библиотекой он связан. Например, в Solaris gcc vs Sun CC vs whatever.
Для кода С++ вы можете также сбрасывать некоторые символы, находить искомое имя функции и затем определять, какой деманглер генерирует правильное исходное имя.
Ответ 4
Попробуйте IDA Pro, который идентифицирует библиотеки и инструменты, используемые для создания исполняемого файла.