Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

gdb python: How to do arithmetic operation on a gdb.value?

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 ?

like image 663
Baijnath Jaiswal Avatar asked Jan 24 '26 02:01

Baijnath Jaiswal


1 Answers

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.

like image 192
Tom Tromey Avatar answered Jan 25 '26 14:01

Tom Tromey



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!