0

短いジャンプ オフセットを持つテーブルを使用しようとしています。

        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 バイトのみを使用しながら、コードの近くのセクションへのジャンプ テーブルを指定するにはどうすればよいでしょうか?

4

1 に答える 1