使用 gdb.value 更改 GDB 中的结构字段

Change struct field in GDB using a gdb.value

我正在 gdb 中定义一个方便的变量

>set $param = (T_packet*)malloc(sizeof(T_packet))

我可以通过 Python

检索它
>p = gdb_helper.parse_and_eval("$param")
<gdb.Value at 0x7f30b42f9170>

显示结构的字段

>python print(p.dereference())

{ID_PACKET = 0 , L_PACKET = 0}

尝试更改字段(C 等效项:p->ID_PACKET=1)

p.dereference()["ID_PACKET"] = 1
>"Setting of struct elements is not currently supported"

有没有办法使用 GDB Python API 更新 p 中字段 ID_Packet 的值?

目前无法使用 Value API 设置值。这只是 gdb 中的一个小漏洞(我查看了但找不到这方面的错误,所以也许提交一个错误是一件好事)。

与此同时,您可以使用 gdb.parse_and_eval 解决它,但有点困难。这个想法是获取相关字段的地址,然后形成像 *(TYPE *) 0xADDR = VALUE 这样的表达式。或者,您可以使用 Inferior.write_memory.

直接写入内存

这两种方法在某些情况下都会失败,例如,您不能以这种方式写入寄存器,从而阻止它在由于 SRA 优化而被拆分的结构上工作。