Подтвердить что ты не робот

Как objdump удается отобразить исходный код с помощью опции -S?

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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