You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 12:12:09