我在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的值?
答案 0 :(得分:1)
目前无法使用gdb.parse_and_eval
API设置值。这只是gdb中的一个小漏洞(我看了但是找不到这个漏洞,所以也许提交一个就可以了。)
与此同时,您可以使用*(TYPE *) 0xADDR = VALUE
解决这个问题,但有点困难。我们的想法是获取相关字段的地址,然后形成类似Inferior.write_memory
的表达式。或者,您可以使用{{1}}直接写入内存。
在某些情况下,这两种方法都会失败,例如,您无法以这种方式写入寄存器,从而无法对由于SRA优化而被拆分的结构进行处理。