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

如何在gdbinit脚本中使用Python调用binascii打印$PC寄存器后10字节数据

gdbinit 中通过Python+binascii打印PC后10字节的实现方案

直接将以下代码写入你的.gdbinit文件即可:

自动触发版本(每次程序暂停时自动打印)

define hook-stop
python
import binascii
try:
    # 读取PC寄存器的数值并转为整数
    pc_addr = int(gdb.parse_and_eval("$pc"))
    # 从PC指向的地址读取10个字节的内存数据
    raw_mem = gdb.selected_inferior().read_memory(pc_addr, 10).tobytes()
    # 转为带空格分隔的十六进制字符串输出
    hex_str = binascii.hexlify(raw_mem, sep=" ").decode("utf-8")
    print(f"PC 后10字节: 0x{pc_addr:x} | {hex_str}")
except Exception as err:
    print(f"读取PC附近内存失败: {str(err)}")
end
end

手动触发版本(自定义命令调用)

如果你不需要自动打印,改成自定义命令即可,使用时在gdb交互界面输入print_pc_bytes就能触发打印:

define print_pc_bytes
python
import binascii
try:
    pc_addr = int(gdb.parse_and_eval("$pc"))
    raw_mem = gdb.selected_inferior().read_memory(pc_addr, 10).tobytes()
    hex_str = binascii.hexlify(raw_mem, sep=" ").decode("utf-8")
    print(f"PC 后10字节: 0x{pc_addr:x} | {hex_str}")
except Exception as err:
    print(f"读取PC附近内存失败: {str(err)}")
end
end

说明

  • 要求你的gdb已编译Python3绑定支持,可在gdb交互界面执行python print("check")验证,正常输出check即可使用。
  • binascii为Python标准库,无需额外安装依赖。
  • 代码中已添加异常捕获,避免PC指向不可读地址时gdb报错退出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:36:04