2

算術演算中に間違った答えが得られる理由:

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

これを行う代替手段はありますか?

4

1 に答える 1

1

ポインター型の 2 つの値を減算しています。これは、C と同様に、結果がオブジェクトのサイズで除算されることを意味します。

代わりに、「オフセット」がポインター型ではなく整数型であることを確認してください。

最後の例では、文字列を減算しようとしています。そんなことはできません。「hex」への呼び出しを計算から印刷に移動すると、機能します。

于 2013-06-26T13:40:24.153 に答える