1

私はこのようなジャンプテーブルを持っています:

jmp  rax

@@table:
jmp @@seg1
jmp @@sge2
jmp @@seg3
...

これは、jmp コードの長さが 2 バイトであることを理解していれば、完全に機能していました。その後、@@seg にコードを追加しましたか? これにより、「さらに離れた」コード セグメント (ラベル) にジャンプするとクラッシュが発生するようになりました。

長いジャンプは 2 よりも長い長さでエンコードされていると結論付けています。残念ながら、私が使用している逆アセンブラはそのjmp rax行で停止するため、確認できません。しかし、結論は論理的です。

コンパイラにアラインさせる方法はありjmp @@segますか? ジャンプテーブルに十分な大きさと一貫したサイズが保証されるように、たとえば4バイトでコマンドを実行しますか? もしそうなら、私はrax4秒でインクリメントすることができます.

nopこれを解決するために、手動で 's を追加したくありません。

4

0 に答える 0