コマンドラインの1つに次のように表示された場合:
jmp *0x804a180(,%eax,4)
どういう意味ですか?最初のコンマの前に値がなく、アドレスの前の*が何を意味するのか正確にはわからないため、具体的に質問します。
コマンドラインの1つに次のように表示された場合:
jmp *0x804a180(,%eax,4)
どういう意味ですか?最初のコンマの前に値がなく、アドレスの前の*が何を意味するのか正確にはわからないため、具体的に質問します。
この命令は、として計算されたアドレスに値が配置されている場所にジャンプします%eax * 4 + 0x804a180
。
は*
AT&T構文で使用され、間接的なジャンプと呼び出しを示します。基本的には「これの値ではなく、これが指す場所にジャンプする」という意味です。次の手順を区別すると便利です。
jmp myAddress # Jumps to the location myAddress
jmp *myPointer # Jumps to the location contained at myPointer
空の値については、0として扱われます。AT&Tアドレス指定の完全な形式はですoffset(%base, %index, multiplier)
が、これらの値はどれも省略できます。乗数(デフォルトは1)を除いて、それぞれのデフォルトは0です。ほとんどの場合、それらを省略できますが、インデックスがあり、ベースがない場合は、アセンブラがどちらかを判断できるように、そこにコンマが必要です。です。