gdb调试改变返回值

背景

使用 GDB 调试时,有时候需要修改返回值,但是返回值有时候无法直接使用p修改,如std::list::empty(); 如何修改标准库的empty函数返回值呢?

修改寄存器值

函数的返回值通常存储在特定寄存器中(例如,x86-64 架构中是 %rax)。在函数返回之前,你可以修改 %rax 的值。

步骤:

  1. 在函数返回之前设置断点(如 ret 指令处)
    1
    b *func+<offset> # 偏移地址为即将返回的位置

2.运行程序并等待断点触发
3.修改返回值所在的寄存器(例如 %rax):