l'opcode E9 est donc limité à un jump de 7f ff ff ff c'est bien ça ?
Dans les deux sens, donc il couvre tout l'espace d'adressage 32 bits. Je n'ai pas vérifié qu'un jump avec overflow fonctionne, mais ça ne m'étonnerait pas.
À vrai dire, je ne sais pas trop ce que fait 'EA'.
$ printf "\xeaabcdef" > jmp
$ ndisasm -b 32 jmp
00000000 EA616263646566 jmp dword 0x6665:0x64636261
Apparemment il faut spécifier le segment de code et l'offset, donc ce n'est pas ce que tu demandes.
Mais il y a un moyen de le trouver:
$ cat jmp.asm
bits 32
jmp [ptr_ma_fonction]
jmp far [ptr_ma_fonction]
ptr_ma_fonction dd 0x42424242
$ nasm jmp.asm
$ ndisasm -b 32 jmp
00000000 FF250C000000 jmp dword near [dword 0xc]
00000006 FF2D0C000000 jmp dword far [dword 0xc]
0000000C 42 inc edx
0000000D 42 inc edx
0000000E 42 inc edx
0000000F 42 inc edx
L'opcode fait deux octets et le paramètre est l'adresse du pointeur en little-endian. Manque de bol l'instruction que tu veux patcher est plus courte, mais rien ne t'empêche de calculer l'offset.
Ollydbg te permet aussi d'éditer le code et de reconstruire un exécutable avec les modifications que tu as faites. C'est plus pratique que nasm/ndisasm si tu as affaire à du PE.