次の行はどういう意味ですか?
...
401147: ff 24 c5 80 26 40 00 jmpq *0x402680(,%rax,8)
...
メモリ アドレスの前のアスタリスクはどういう意味ですか? また、メモリ アクセス メソッドに最初のレジスタ値がない場合はどういう意味ですか?
通常は ("%register", %rax, 8) のようなものです。ただし、この場合は最初のレジスタがありません。
任意のヒント?
ベストアンサー1
これは AT&T アセンブリ構文です:
- 送信元が送信先より先に来る
- ニーモニックサフィックスはオペランドのサイズを示します(
q
quad など) - レジスタには接頭辞が付き
%
、即値には$
DISP(BASE, INDEX, SCALE)
有効アドレスは(DISP + BASE + INDEX * SCALE)の形式です。- 間接ジャンプ/呼び出しオペランドは
*
(直接ではなく) で示されます。
したがって、 に格納され、4 ワード長でjmpq
ある絶対アドレスにジャンプするための があります。%rax * 8 + 0x402680
jmp foo
AT&T 構文では、RIP = foo ( ) と RIP = load from some symbol address ( )を区別する方法が必要でしたjmp *foo
。 はmovl $1, foo
絶対アドレスへのストアであることを覚えておいてくださいfoo
。
他のアドレス指定モードでは、どのような種類のジャンプ/呼び出しを実行しているかが曖昧になることはなく、ベア ラベル以外のものはすべて間接的である必要があります。(GAS はそれを推測し、またはまたはベア シンボル名以外のものを*
実行すると、間接ジャンプについて警告します。)jmp %rax
jmp 24(%rax)
(64 ビット モードでは、通常、jmp *foo(%rip)
グローバル変数を RIP にロードするために を使用し、 のような 32 ビット絶対アドレスは使用しませんjmp *foo
。ただし、その可能性は存在し、AT&T 構文が設計された x86-64 より前では、これが通常の方法でした。)