32

次の行はどういう意味ですか?

...
401147: ff 24 c5 80 26 40 00    jmpq   *0x402680(,%rax,8)
...

メモリアドレスの前のアスタリスクはどういう意味ですか?また、メモリアクセスメソッドに最初のレジスタ値がない場合、それはどういう意味ですか?

通常は( "%register"、%rax、8)のようなものですが、この場合、最初のレジスタはありません。

任意のヒント?

4

7 に答える 7

17

実際には、これは計算されたテーブル jmpであり、0x402680 は tableele のアドレスであり、rax は 8 バイト (qword) ポインターのインデックスです。

于 2012-02-10T09:08:50.597 に答える
5

メモリに含まれるアドレスへのジャンプです。アドレスはメモリの address に格納されますrax*8+0x402680。ここraxで、 は現在のrax値です (この命令が実行されたとき)。

于 2012-02-10T07:08:16.703 に答える
5

jmpq指定されたアドレスへの無条件ジャンプです。「q」は、クワッド ワード (64 ビット長) を扱っていることを意味します。

*0x402680(,%rax,8): これは、x-86 アセンブリでアドレスを記述する方法です。通常、最初のコンマの前にレジスターがあると言っているのは正しいですが、レジスターが指定されていない場合でも同じ規則に従います。

形式は次のよう に機能します。D(reg1, reg2, scalingFactor)ここで、D は変位を表します。変位は基本的に単なる整数です。reg1最初のレジスタまたはベース レジスタです。reg2は 2 番目のレジスタであり、scalingFactor2、4、8 のいずれかです (1 である可能性もありますが、それについてはわかりません)。これで、次のように値を追加するだけでアドレスを取得できます: 変位 + (値 at reg1) + scalingFactor*(値 at reg2)。

アドレスの前のアスタリスクが何のためにあるのか完全にはわかりませんが、私の推測では、変位値がそのアドレスに格納されていることを意味します。

お役に立てれば。

于 2014-04-29T06:51:35.283 に答える
3

Necrolis が書いたように、Intel の構文はもう少し明白ですが、RTNは本当に明確です。この線

jmpq   *0x402680(,%rax,8)

RTN では次のように記述されます。

RIP <- M[0x402680 + (8 * RAX)]

Mシステムメモリはどこですか。

そのため、一般的な形式 を書くことができますjmpq *c(r1, r2, k)。ここcで、 は即値定数でr1あり、r2汎用レジスタでkあり、1 (デフォルト)、2、4、または 8 のいずれかです。

RIP <- M[c + r1 + (k * r2)]
于 2013-03-14T14:47:15.990 に答える