3

私はx86コードの一部を「デバッグ」しています-序文は、それを「ロック解除」するコードからの一連の5つの数字であり、それを保持する数字でメモリ+数学でたくさん飛び回っています。

最初の「ジャンプ」の前に入力する必要があるものをトレースしました。それは次のとおりです。

cmp    %eax,0x80498d4(,%ebx,4)

cmp s, dこのコマンドは、ds を取得して EFLAGS を設定する場所であることを理解しています。しかしD 0x80498d4(, %ebx,4)、この例では何ですか?を登録するために何かが行われていることは明らかですが%ebx、私にはわかりません。

4

1 に答える 1

4

それが AT&T のメモリ参照構文です。

AT&T のdisplacement(base register, offset register, scalar multiplier)構文は Intel の構文に変換され[base register + displacement + offset register * scalar multiplier]ます (これははるかに理解しやすいと思います)。

したがって、AT&T 構文はIntel 構文cmp %eax,0x80498d4(,%ebx,4)と同等です。cmp [80498d4h + ebx*4], eax

この命令は英語で「レジスタ EAX の内容をアドレス 0x80498d4+(EBX*4) のメモリの内容と比較する」と読みます。

于 2013-10-13T04:14:07.073 に答える