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

时间:2017-01-23 14:47:59

标签: python struct gdb field

我在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的值?

1 个答案:

答案 0 :(得分:1)

目前无法使用gdb.parse_and_eval API设置值。这只是gdb中的一个小漏洞(我看了但是找不到这个漏洞,所以也许提交一个就可以了。)

与此同时,您可以使用*(TYPE *) 0xADDR = VALUE解决这个问题,但有点困难。我们的想法是获取相关字段的地址,然后形成类似Inferior.write_memory的表达式。或者,您可以使用{{1}}直接写入内存。

在某些情况下,这两种方法都会失败,例如,您无法以这种方式写入寄存器,从而无法对由于SRA优化而被拆分的结构进行处理。