CPU眼里的C/C++: 1.3 汇编级单步调试函数执行过程
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 on
set 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