2

我正在使用 python 集成为 gdb 创建一个命令,并尝试获取变量的地址。我已经使用了这个值:

v = gdb.parse_and_eval("var_name")

但这v可以根据类型以多种方式序列化。例如,如果它是 a 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

有没有更直接的方法?

4

1 回答 1

2

我不完全清楚你在问什么。

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

但是,在第二部分中,听起来您可能想要指针的值。您可以直接使用该值(例如 + 在 Value 上可以正常工作);或者您可以将其直接转换为 Python "long" 以将值作为普通的旧标量获取:

number = long(v)
于 2013-10-02T01:45:02.117 回答