短いジャンプ オフセットを持つテーブルを使用しようとしています。
mov $4, %eax
j1:
movzbl offset(%eax),%edx # load jump offset
jmp *(%edx)
r1:
...
offset:
.byte 0, 1, 2, 3, 4 # Example values
Objdump はff 22
、ショート ジャンプではないものとしてエンコードされたジャンプを示します。
また、この質問で見たものに基づいて、jmp *r1(%edx)
ラベル + オフセットにジャンプしようとしました: On x86 assembly jump tableですが、gdb は、メモリ内でまったく異なる場所に移動することを示しています。r1
別のアイデアは、この回答eip
に示されているように、手動でオフセットを読み取って追加することです:
call get_eip
get_eip:
pop %eax
add %edx, %eax
理想的には、コード ゴルフの利益のために、ソリューションはできるだけ短いものです。では、オフセットごとに 1 バイトのみを使用しながら、コードの近くのセクションへのジャンプ テーブルを指定するにはどうすればよいでしょうか?