Как objdump удается отобразить исходный код с опцией -S? - PullRequest
24 голосов
/ 24 марта 2010

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

Ответы [ 3 ]

27 голосов
/ 25 марта 2010

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

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

10 голосов
/ 03 декабря 2012

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

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

3 голосов
/ 19 октября 2013

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

...