При разборке GDB не распознаются метки ASM, например: _start

#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 not section .code . Это, как известно, сбивает с толку gdb 🙂

4. @Jester спасибо, я только что заметил это и исправил, но все равно это не исправило, я не знаю, что происходит не так с gdb

5. @Jester я, однако, делаю свой собственный способ его разборки, но я хочу использовать эту конкретную команду (я вижу, что она часто завершается, например, в tutos: disass main ), Но gdb это не нравится.