#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 для поиска информации о строке исходного файла. Что может быть причиной ошибки сегментации?