Можно ли узнать, какой компилятор использовался для компиляции программы?
-
03-07-2019 - |
Вопрос
Учитывая исполняемый файл, скомпилированный из C для работы в Solaris, можно ли определить, какой компилятор использовался для компиляции соответствующего неполного исполняемого файла?
Я ничего не вижу ни при использовании строк, ни при использовании команды файла, и магия, похоже, не содержит ничего конкретного.
Обычно компиляторы оставляют отпечатки пальцев в своих исполняемых выходных файлах?
ваше здоровье,
Решение
Если исполняемый файл не раздет, попробуйте/usr/ccs/bin mcs-p, это обычно показывает компилятор, линкер и все используемые файлы заголовков
Другие советы
Да, IDA отлично подходит для этого.Он использует технологию под названием ФЛИРТОВАТЬ.
ПЭИД сделает свое дело.Обычно это работает просто великолепно.Очевидно, что PEID — это инструмент Windows, но это не имеет значения и должно показывать вам компилятор (иногда даже конкретную информацию о версии).
Создавайте небольшие тестовые приложения с помощью каждого компилятора, который вы пытаетесь идентифицировать.Затем посмотрите результаты в шестнадцатеричном редакторе и попытайтесь найти закономерности.Это может оказаться действительно очевидным — например, «Богатые» подписи из компоновщика Microsoft.
Не разобрано:
$ cc -О привет.c
$ файл a.out
а.выход:ELF 32-битный исполняемый файл MSB SPARC32PLUS Версия 1, V8+ Требуется, динамически подключаемый, не удаляемый
$ strings -A A.out | Греп 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 Патч 148917-07 18.10.2013;бэкэнд;raw;cd;
Разделено:
$ раздеться
$ файл a.out
а.выход:ELF 32-битный MSB исполняемый файл SPARC32PLUS Версия 1, V8+ Требуется, динамически подключаемый, удаленный
$ strings -A A.out | Греп CC
(никто)
Visual Studio и GCC обычно используют разные процедуры запуска (которые вызывают main).Возможно, это намек.Хотя я не знаю, как другие.Что касается dll, я не могу придумать что-то подобное в голову.
Компиляторы обычно добавляют свою личную «подпись» в виде открытого текста в скомпилированные файлы.Вы можете использовать такой инструмент, как строки, чтобы разобраться в открытом тексте.