#assembly #gdb #reverse-engineering
#сборка #gdb #обратная разработка
Вопрос:
у меня есть файл сборки, который я собрал и связал с помощью этих команд:
$ nasm -f elf -F dwarf -g -o FILENAME.o FILENAME.asm
$ ld -o FILENAME FILENAME.o
Как вы можете видеть, я добавил -g
, чтобы nasm генерировал символы отладки. и формат файла такой:
section .code:
global _start
_start:
ASM HERE
ANOTHER_LABEL:
ASM HERE
YET_ANOTHER_LABEL:
ASM HERE
когда я запускаю gdb -q FILENAME
и после запуска file ( run
), я пытаюсь разобрать _start
через disassemble _start
него, выдает эту ошибку:
'_start' has unknown type; cast it to its declared type
это дает мне ту же ошибку ( _start
изменения), когда я пытаюсь разобрать любое другое имя метки ( ANOTHER_LABEL
или YET_ANOTHER_LABEL
). Также, когда я набираю только disassemble
, это дает мне только разборку первой метки (от _start
начала до начала ANOTHER_LABEL
). Как мне исправить эту ошибку?
Комментарии:
1. Вы должны установить тип и размер функций. Проще сделать что-то вроде
x/10i _start
2. @Jester это выдает мне ту же ошибку :
'_start' has unknown type; cast it to its declared type
3. Также вы должны использовать
section .text
notsection .code
. Это, как известно, сбивает с толку gdb 🙂4. @Jester спасибо, я только что заметил это и исправил, но все равно это не исправило, я не знаю, что происходит не так с gdb
5. @Jester я, однако, делаю свой собственный способ его разборки, но я хочу использовать эту конкретную команду (я вижу, что она часто завершается, например, в tutos:
disass main
), Но gdb это не нравится.