次のオペコードを使用して短いジャンプを行いたいとします。
EB CB または JMP rel8
「ジャンプ ショート、RIP = RIP + 64 ビットに拡張された 8 ビットの変位符号」
(ここで、CB は、EIPレジスタの方向に関連する相対オフセットを表すバイト符号付きの値です)
この短いジャンプの実行時間 (参照方向) の EIP は 2 バイト命令のベースであるため、オフセットは常にオフセット + 2になる可能性がありますが、加数は常に発生します。
eb 30 = jmp 0x00000032 (+30)
eb e2 = jmp 0xffffffe4 (-30)
fe + 2 は00またはEIPであるため、EIP は意図的に同じ方向にすることができます。
eb fe = jmp 0x00000000
数値が負であるにもかかわらず、オーバーオフセットが分岐して発生したことは驚くべきことです。しかし、インテルでは言及がありません (おそらく 3000 ページのため)。
インテル® 64 および IA-32 アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル: Vol. 2A 3-423
ジャンプ範囲が現在のEIP 値から-128 ~ +127 に制限されているニア ジャンプ。
次に、次の 3 つの可能性を考えます。
- は実行時の EIPの前後の値であるため、+2 です。
- コード化された値は、2 のコンポーネントでエンコードされた符号付き数値ではありません。
- 説明書に載ってるけどバカだから見てない