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