Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как objdump может отображать исходный код с опцией -S?

Автор вопроса: anonОтветов: 3

Есть ли ссылка на исходный файл в бинарнике? Я попытался запустить строки в двоичном файле и не смог найти ссылку на указанный исходный файл...

  • Хороший вопрос, плохие ответы (на сегодняшний день). Также см. Как с помощью GCC встроить исходные строки в выходные данные сборки? jww 02.09.2017

gccclinuxdisassemblyobjdump

Ответы

Ответ 1 · рейтинг 31 · caf

objdump использует отладочную информацию DWARF, скомпилированную в двоичный файл, который ссылается на имя исходного файла. Если двоичный файл не скомпилирован с информацией об отладке или objdump не удается найти исходный файл, то вы не получаете исходный код на выходе - только сборку.

Вы не видите имя исходного файла, когда используете strings в двоичном файле, потому что DWARF использует сжатие.

Ответ 2 · рейтинг 11 · vkrnt

Информация о карлике в двоичном файле хранит сопоставление между инструкциями (фактически указателем инструкции или IP) и исходным файлом и номером строки. Исходный файл указывается с использованием полного пути, поэтому его можно найти, даже если двоичный файл перемещается. Чтобы увидеть эту информацию, вы можете использовать objdump --dwarf=decodedline <binary> (бинарный файл, конечно, должен быть скомпилирован с -g).

Как только вы скажете objdump -S <binary>, он использует эту информацию о дварфах, чтобы предоставить вам исходный код вместе с дизассемблированием.

Ответ 3 · рейтинг 3 · JerseyGood

Насколько я понимаю, для objdump отображения исходного кода из двоичного кода существует предварительное условие: отладочная информация DWARF должна быть скомпилирована в двоичный файл. (от gcc -g sourcefile или gcc -gdwarf-2 sourcefile) И, обработав эту информацию DWARF, objdump может получить исходный код, как ответили @vlcekmi3 и @vkrnt

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы