Intereting Posts
Определите количество уникальных значений, а затем количество вхождений этих значений в файл Как добавить уникальный идентификатор имени файла в работу cron? Объяснение для фоновых задач в bash в чем разница между `>> / dev / stderr` (с пробелом) и`> & 2`? rpmbuild другой путь для sysconfdir hpux оставляет файлы, которые начинаются с # позади после удаления программы. Это нормально и как я могу их удалить? Список только обычных файлов (но не каталогов) в текущем каталоге словари – общий пакет жалуется на возможную коррупцию debconf Как использовать Unindented строку в качестве записи отдельно в awk cli Установка и применение глобальных настроек KDE в KDE 5 Plasma ЕСЛИ ЛИШЬ сравнение строк из curl Сортировка ls по времени, когда слишком много файлов для одного вызова Аудиовыключение и выход после обновления с Ubuntu 12.10 -> 13.10 Использовать _roff, чтобы подчеркнуть слова Команды окраски терминала (например, LS и CD)

Можем ли мы получить информацию о компиляторе из двоичного файла эльфа?

Есть ли какой-то шанс узнать, как был создан двоичный файл под Linux? (и / или других Unix)

Компилятор, версия, время, флаги и т. Д. …

Я смотрел на readelf и не мог найти много, но могут быть другие способы анализа двоичного кода / раздела и т. Д. …

Все, что вы знаете, как извлечь?

Существует не универсальный способ, но вы можете сделать обоснованное предположение, ища вещи, сделанные только одним компилятором.

GCC является самым простым; он пишет раздел .comment , содержащий строку версии GCC (ту же строку, которую вы получаете, если вы запускаете gcc --version ). Я не знаю, есть ли способ показать его с помощью readelf , но с objdump это:

 objdump -s --section .comment /path/binary 

Я просто понял, что проигнорировал остальную часть вашего вопроса. Флаги обычно не сохраняются; скорее всего, они будут в разделе комментариев, но я никогда не видел этого. В заголовке COFF есть пятно в метке времени, но в ELF нет эквивалента, поэтому я не думаю, что время компиляции доступно либо

Как насчет:

 readelf -p .comment a.out 

Вы можете попробовать использовать команду strings . Он создаст много текстового вывода; проверяя его, вы можете угадать компилятор.

pubuntu@pubuntu:~$ strings -a a.out |grep -i gcc
GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3

Здесь я знаю, что он скомпилирован с помощью gcc но вы всегда можете перенаправить вывод strings в файл и изучить его.

Существует одна очень полезная утилита под названием peid для Windows, но я не могу найти альтернативы для нее в Linux.

Вы также можете использовать этот умный скрипт, который подсчитывает числа различных инструкций ЦП, используемых двоичным кодом. Он основан на анализе вывода objdump. Помните, что это может занять довольно много времени, если вы используете его на большом двоичном файле.

Существует два метода. Оба дадут тот же результат

 objdump -s --section .comment path/to/binary 

Используя команду readelf, readelf -S binary будет отображать 40 заголовков разделов в двоичном формате. Обратите внимание на серийный номер заголовка секции .comment . В моей системе это показало 27 (может быть разным для вашего случая)

readelf -x 30 path/to/binary ->, который отобразит шестнадцатеричный дамп раздела «.comment». В этом дампе вы можете увидеть компилятор, используемый для построения двоичного файла.

readelf или objdump оба могут это сделать.

Файл ELF, скомпилированный gcc, добавит .note.ABI-тег и .note.gnu.build-id два раздела. оба могут отображаться

 objdump -sj .note.ABI-tag ELFFILE objdump -sj .note.gnu-build-id ELFFILE 

опция «s» означает отображение полного содержимого, «j» для указания названия раздела. Этот стиль содержит шестнадцатеричное содержимое этих разделов.

 readelf -n 

покажет человеко-читаемое содержимое ELFFILE. Параметр «n» означает ПРИМЕЧАНИЯ.

Выберите один, как вам нравится.

Кстати, используйте objcopy, вы можете добавить свой раздел в файл elf.