我正在使用python集成为gdb创建一个命令,并尝试获取变量的地址。我已经使用了价值:
v = gdb.parse_and_eval("var_name")
但是v
可以根据类型以多种方式序列化。例如,如果它是char*
,它将显示为:
>>> print v
0x7f06a2cfd320 "x"
>>> print v.address
None
好的,所以这不能按预期工作。我首先尝试解除引用,然后获取地址,但这让我回到了原始值:
>>> print v.dereference().address
0x7f06a2cfd320 "x"
如何才能获得地址部分?到目前为止,我能找到的唯一方法看起来有点长:
>>> vptr = gdb.lookup_type("void").pointer()
>>> print v.cast(vptr)
0x7f06a2cfd320
还有更直接的方法吗?
答案 0 :(得分:2)
我不清楚你在问什么。
在第一部分中,您似乎想要变量“var_name”的地址。在这种情况下,你想要写“.address”;但请注意,并非所有变量都有地址。例如,变量可以由编译器放入寄存器中。鉴于此属性的值为None,我猜这就是发生的事情。 (您可以使用其他gdb命令来确定...)
在第二部分中,听起来好像你想要指针的值。你可以直接使用这个值(比如+在值上工作正常);或者你可以将它直接转换为Python“long”以获得作为普通旧标量的值:
number = long(v)