CPU眼里的C/C++: 1.3 汇编级单步调试函数执行过程

1. 目的

2. 基于 GDB 的汇编级单步调试

原始代码

#include 

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 寄存器的值减8
  • x 命令: 查看内存

配置 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

CPU眼里的C/C++: 1.3 汇编级单步调试函数执行过程_第1张图片

3. 基于 LLDB

4. 基于 Visual Studio

5. 基于 WinDBG

你可能感兴趣的:(C/C++,1024程序员节)