Есть ли ссылка на исходный файл в бинарнике? Я попытался запустить строки в двоичном файле и не смог найти ссылку на указанный исходный файл...
Как objdump может отображать исходный код с опцией -S?
Ответы (3)
objdump
использует отладочную информацию DWARF, скомпилированную в двоичный файл, который ссылается на имя исходного файла. Если двоичный файл не скомпилирован с информацией об отладке или objdump
не удается найти исходный файл, то вы не получаете исходный код на выходе — только сборку.
Вы не видите имя исходного файла, когда используете strings
в двоичном файле, потому что DWARF использует сжатие.
objdump
(с некоторыми неизвестными параметрами) для отображения исходного кода, чередующегося с дизассемблированием? Не могли бы вы предоставить фактические шаги с фактическими командами?
- person jww; 02.09.2017
-g
для gcc
включает отладочную информацию, а параметр -S
для objdump дизассемблирования с чередованием исходного кода. Но вопрос не в том, как это сделать; спрашивающий уже знал это, вместо этого они спрашивали, как это реализовано (как objdump
находит источник для чередования).
- person caf; 02.09.2017
Информация о карлике в двоичном файле хранит сопоставление между инструкциями (фактически указателем инструкции или IP) и исходным файлом и номером строки. Исходный файл указывается с использованием полного пути, поэтому его можно найти, даже если двоичный файл перемещается. Чтобы увидеть эту информацию, вы можете использовать objdump --dwarf=decodedline <binary>
(бинарный файл, конечно, должен быть скомпилирован с -g
).
Как только вы скажете objdump -S <binary>
, он использует эту информацию о дварфах, чтобы предоставить вам исходный код вместе с дизассемблированием.
objdump
обеспечить дизассемблирование с чередованием номеров строк исходного кода.
- person jww; 02.09.2017
Насколько я понимаю, для objdump
отображения исходного кода из двоичного кода существует предварительное условие: отладочная информация DWARF должна быть скомпилирована в двоичный файл. (от gcc -g sourcefile
или gcc -gdwarf-2 sourcefile
) И, обработав эту информацию DWARF, objdump
может получить исходный код, как ответили @vlcekmi3 и @vkrnt
objdump
(с некоторыми неизвестными параметрами) для отображения исходного кода, чередующегося с дизассемблированием? Не могли бы вы предоставить фактические шаги с фактическими командами?
- person jww; 02.09.2017