Objdump выдает ошибку сегментации с опцией -S

#c #segmentation-fault #cygwin #elf #objdump

#c #ошибка сегментации #cygwin #elf #objdump

Вопрос:

Я пытаюсь использовать objdump для отображения исходного кода, а также для разборки с использованием опции -S. Я запускаю objdump на cygwin. Я создал objdump для ARM на cygwin. Компилятором для сборки был gcc.

Файл elf был создан для процессора ARM с использованием набора команд Thumb2 с использованием компилятора TI ARM.

Я могу запустить objdump, чтобы просто извлечь дизассемблирование (используя опцию -d). Однако я получаю ошибку сегментации, когда пытаюсь использовать ее и для отображения исходного кода. Он выходит из строя, как только достигает раздела .text . Результатом использования objdump -Mforce-thumb -S prog.out является:

prog.out: формат файла elf32-littlearm

Разборка section .text:

000000c0 <add_function> :
ошибка сегментации (сброс ядра)

Ответ №1:

Objdump — это не декомпилятор, а дизассемблер. Разборка (сравнительно) проста, при условии, что двоичный файл не использует приемы защиты от разборки. Декомпиляция, напротив, является очень сложной задачей, и objdump не пытается это сделать. Он может сбрасывать исходный код только в том случае, если он включен в двоичный файл. Это не совсем обычное явление для собственных двоичных файлов, но из того, что я слышал, двоичные файлы Java, как правило, включают исходный код.

Комментарии:

1. Я где-то читал (я не могу найти точную ссылку прямо сейчас), что ELF-файлы хранят абсолютный путь к источнику, если они скомпилированы с опцией -g. objdump предполагается использовать эту информацию для отображения источника. Это не декомпилятор. Я также смог использовать опцию -dwarf=decodedlines для поиска информации о строке исходного файла. Что может быть причиной ошибки сегментации?