如何在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
相关产品推荐
相关产品推荐

