1. 目的
2. 基于 GDB 的汇编级单步调试
原始代码
#include <stdio.h>long test()
{long a = 1;a += 2;return a;
}int main()
{int ret = test();printf("test return %d\n", ret);return 0;
}
关键 gdb 命令
si
指令执行汇编级的单步调试info registers
读取寄存器值push rbp
会将 rbp 值存放在 rsp 下方, 然后让 rsp 寄存器的值减8x
命令: 查看内存
配置 gdb
~/.gdbinit
set disassembly-flavor intel
set breakpoint pending on
set history save # 退出 gdb 后,直接在当前目录下的 .gdb_history 中看到命令记录
set verbose off
set print pretty on
set print array off
set print array-indexes off
set disable-randomization onset target-async 1
set pagination off
set non-stop on
gdb 完整命令
通过 gdb 单步调试汇编指令,可以验证 rsp 的取值变化:
g++ test3.cpp
gdb ./a.out
b main
r
disassemble
si
si
disassemble
si
disassemble
info registers rsp rbp
si
disassemble
info registers rsp rbp
x /1xg $rsp
q