gdb python:如何对gdb.value进行算术运算?

时间:2013-06-26 12:56:24

标签: python gdb gdb-python

为什么我在进行算术运算时得到错误答案:

(gdb) python address = gdb.parse_and_eval('&(((struct my_struct *)next->priv).wait_list)')
(gdb) python print address
0x410027a00728
(gdb) python offset = gdb.parse_and_eval('&((struct wait_list_t *)0)->list')
(gdb) python print offset
0x0
(gdb) python diff = address - offset
gdb) python print diff
0x410027a0072

虽然输出应为0x410027a00728。 我通过

检查地址类型和偏移量
(gdb) python print address.type
struct list_head *
(gdb) python print offset.type
struct list_head *

我也尝试了这个

(gdb) python y = hex(long(address))
(gdb) python print y
0x410027A14FF0L
(gdb) python z = hex(long(offset))
(gdb) python print z
0x0L
(gdb) python diff = y - z
Traceback (most recent call last):
File "<string>", line 1, in ?
TypeError: unsupported operand type(s) for -: 'str' and 'str'
Error while executing Python code.

有没有替代方法呢?

1 个答案:

答案 0 :(得分:1)

您正在减去指针类型的两个值。这意味着结果(如C中)除以对象的大小。

相反,请确保“offset”具有整数类型,而不是指针类型。

在最后一个示例中,您尝试减去字符串。你不能这样做。将调用的“十六进制”从计算移动到打印件,它将起作用。