如何在GDB中保存命令执行结果到变量并在调试中复用
GDB保存rsp指向内存值到自定义变量的方法
别去解析x/x $rsp的文本输出,那种靠截字符串抓值的方法很容易因为GDB版本变化、输出格式调整失效,用GDB原生的便利变量功能直接取值就行,稳定还方便。
- 存值操作
直接在GDB交互窗口执行对应命令,就能把rsp寄存器指向地址存储的数值存入自定义变量,变量名前面加$是GDB便利变量的固定写法:set $saved_addr = *(unsigned int*)$rsp
适配说明:上面的命令和
x/x $rsp的读取逻辑完全一致——按4字节长度、十六进制格式读取rsp指向的内存值。如果你在64位程序调试中需要读取8字节长度的指针对应值(对应x/gx $rsp的输出),把强制转换的类型改成unsigned long long即可,对应命令为set $saved_addr = *(unsigned long long*)$rsp。
赋值完成后可以执行p $saved_addr校验,输出的数值就是你在x/x $rsp结果中看到的括号内的目标值(示例中的0x00400b)。
- 后续调用
所有GDB命令里需要用到这个值的位置,直接写$saved_addr就能引用,比如你需要在断点触发时从这个地址开始导出内存,直接执行:dump binary memory dump.bin $saved_addr $saved_addr + 0x100
上述命令会从$saved_addr存储的地址起始,导出总长度0x100字节的内存数据,保存到当前目录的dump.bin文件中。
内容的提问来源于stack exchange,提问作者Noob_learner_90
相关产品推荐
相关产品推荐

