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

在GDB脚本中能否获取`old rip at`的值并用于表达式运算

GDB获取old rip at值用于运算的实现方法

完全可以实现,以下是两种常用的、适配不同场景的实现方式:

  • 方式一:基于x86_64常规栈帧直接计算(最简单,无需解析输出)
    x86_64架构默认栈帧布局中,rbp寄存器指向当前栈帧基地址,基地址+8的位置就是old rip at对应的返回地址存储位置,直接定义GDB便利变量即可:

    # 定义存储old rip地址的便利变量
    set $old_rip_at = $rbp + 8
    # 直接做你需要的偏移量计算
    p $old_rip_at - $rsp
    

    这种方式适合没有开启栈帧省略编译选项的常规程序,执行效率最高,最适合自动化脚本调用。

  • 方式二:解析info frame输出(兼容所有场景,结果和info frame完全一致)
    如果目标程序开启了-fomit-frame-pointer等优化选项导致rbp不可用,你可以通过解析info frame的输出提取对应值,用GDB内置Python API实现的话稳定性最高,不会受输出格式微调影响:

    # 在GDB中执行以下Python代码即可自动赋值便利变量
    python
    import re
    frame_info = gdb.execute("info frame", to_string=True)
    match = re.search(r"old rip at (0x[0-9a-f]+)", frame_info)
    if match:
        gdb.execute(f"set $old_rip_at = {match.group(1)}")
    end
    # 后续直接运算即可
    p $old_rip_at - $rsp
    

提示:如果是写外部自动化脚本调用GDB,也可以把info frame的输出导出到外部,用grep、awk等工具提取地址后再传入GDB做运算,逻辑和上述Python实现一致。

内容的提问来源于stack exchange,提问作者Aaa Bbb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:06:04