Есть ли ссылка на исходный файл в двоичном формате? Я попытался запустить строки в двоичном файле и не смог найти ссылку на исходный файл, указанный...
Как objdump удается отобразить исходный код с помощью опции -S?
Ответ 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 ответил