GDB является отладчиком исходного (или символического) уровня, что означает, что предполагается для работы с «языками программирования высокого уровня» ... что не так!
Но подождите секунду, потому что, с точки зрения отладчика, отладка программ ASM намного проще, чем языки более высокого уровня: делать практически нечего! Двоичный файл программы всегда содержит инструкцию по сборке, там просто написано в машинном формате, а не в формате ascii.
И у GDB есть возможность конвертировать его для вас. Вместо выполнения list
для просмотра кода используйте disassemble
для просмотра кода функции:
(gdb) disassemble <your symbol>
Dump of assembler code for function <your symbol>:
0x000000000040051e <+0>: push %rbp
0x000000000040051f <+1>: mov %rsp,%rbp
=> 0x0000000000400522 <+4>: mov 0x20042f(%rip),%rax
0x0000000000400529 <+11>: mov %rax,%rdx
0x000000000040052c <+14>: mov $0x400678,%eax
0x0000000000400531 <+19>: mov %rdx,%rcx
или x/5i $pc
, чтобы увидеть 5 i инструкцию после $ pc
(gdb) x/5i $pc
=> 0x400522 <main+4>: mov 0x20042f(%rip),%rax
0x400529 <main+11>: mov %rax,%rdx
0x40052c <main+14>: mov $0x400678,%eax
0x400531 <main+19>: mov %rdx,%rcx
0x400534 <main+22>: mov $0xc,%edx
затем используйте stepi
(si
) instread из step
и nexti
(ni
) вместо next
.
display $pc
также может быть полезно для печати текущего pc
всякий раз, когда нижний останавливается (т. Е. После каждого nexti
/ stepi
.