سؤال

why i am getting wrong answer while doing arithmetic operation:

(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

while output should be 0x410027a00728. i checked the type of address and offset by

(gdb) python print address.type
struct list_head *
(gdb) python print offset.type
struct list_head *

I tried this also

(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.

Is there any alternative to do this ?

هل كانت مفيدة؟

المحلول

You are subtracting two values of pointer type. This means that the result, as in C, is divided by the size of the object.

Instead, ensure that "offset" has an integral type, not a pointer type.

In the last example you are trying to subtract strings. You can't do that. Move the calls to "hex" from the computations to the prints and it will work.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top