0

ジャンプ テーブルに関するコースの例を読んでいます。彼らは呼ぶgdb x/8g 0x123456

結果の出力は次のようになります。

0x123456    0x000000000000134234    0x0000000000005f424
0x123487    0x0000000000001dd1ac    0x000000000000ef327

ジャンプテーブルはアドレスを実行するコードのアドレスにマップすると思いました。では、なぜ 3 つの列があるのでしょうか (2 であるべきではありませんか?)。

4

1 に答える 1

1

では、なぜ 3 つの列があるのですか (2 であるべきではありませんか?)。

次のような実際の G​​DB 出力を貼り付けませんでした。

0x123450    0x000000000000134234    0x0000000000005f424
0x123460    0x0000000000001dd1ac    0x000000000000ef327

(最初の列は異なります)。プログラミングでは、細部が重要です。

ターミナルを狭くすると、次のように 2 つの列が得られます。

0x123450    0x000000000000134234
0x123458    0x0000000000005f424
0x123460    0x0000000000001dd1ac
0x123468    0x000000000000ef327

KerrekSB が提案したように、GDB のマニュアルを読んで、何が行われているかを理解しxてください。ヒント: 最初の列は重要ではありません。テーブル自体が格納されている場所です。

于 2014-06-14T21:11:29.577 に答える