从gdb.Value获取地址

时间:2013-10-01 23:24:01

标签: python gdb

我正在使用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

还有更直接的方法吗?

1 个答案:

答案 0 :(得分:2)

我不清楚你在问什么。

在第一部分中,您似乎想要变量“var_name”的地址。在这种情况下,你想要写“.address”;但请注意,并非所有变量都有地址。例如,变量可以由编译器放入寄存器中。鉴于此属性的值为None,我猜这就是发生的事情。 (您可以使用其他gdb命令来确定...)

在第二部分中,听起来好像你想要指针的值。你可以直接使用这个值(比如+在值上工作正常);或者你可以将它直接转换为Python“long”以获得作为普通旧标量的值:

number = long(v)