私はこのようなジャンプテーブルを持っています:
jmp rax
@@table:
jmp @@seg1
jmp @@sge2
jmp @@seg3
...
これは、jmp コードの長さが 2 バイトであることを理解していれば、完全に機能していました。その後、@@seg にコードを追加しましたか? これにより、「さらに離れた」コード セグメント (ラベル) にジャンプするとクラッシュが発生するようになりました。
長いジャンプは 2 よりも長い長さでエンコードされていると結論付けています。残念ながら、私が使用している逆アセンブラはそのjmp rax
行で停止するため、確認できません。しかし、結論は論理的です。
コンパイラにアラインさせる方法はありjmp @@seg
ますか? ジャンプテーブルに十分な大きさと一貫したサイズが保証されるように、たとえば4バイトでコマンドを実行しますか? もしそうなら、私はrax
4秒でインクリメントすることができます.
nop
これを解決するために、手動で 's を追加したくありません。