背景
使用 GDB 调试时,有时候需要修改返回值,但是返回值有时候无法直接使用p修改,如std::list::empty(); 如何修改标准库的empty函数返回值呢?
修改寄存器值
函数的返回值通常存储在特定寄存器中(例如,x86-64 架构中是 %rax)。在函数返回之前,你可以修改 %rax 的值。
步骤:
- 在函数返回之前设置断点(如 ret 指令处)
1
| b *func+<offset> # 偏移地址为即将返回的位置
|
2.运行程序并等待断点触发
3.修改返回值所在的寄存器(例如 %rax):