Supposons que je veuille faire un saut court en utilisant l'opcode EB, jmp rel8
saut court
Entrée dans le manuel d'Intel :
EB CB ou JMP rel8
"En bref, RIP = RIP + signe de déplacement de 8 bits étendu à 64 bits"
(où CB est un octet valeur signée représentant le décalage relatif relatif à la direction dans PIE registre)
Peut-être que le décalage sera toujours décalage+2 parce que l'EIP dans le temps d'exécution (la direction de référence) dans ce saut court est la base de l'instruction de deux octets, mais l'addend se produit toujours
eb 30
=jmp 0x00000032 (+30)
eb e2
=jmp 0xffffffe4 (-30)
alors EIP peut être intentionnellement dans la même direction car fe + 2 est 00 o PIE .
eb fe
=jmp 0x00000000
Je trouve surprenant que la surcompensation s'est produit une bifurcation bien que le nombre soit négatif. Mais dans l'Intel je ne trouve aucune mention (peut-être parce que 3000 pages).
Architectures Intel® 64 et IA-32 Manuel du développeur de logiciels : Vol. 2A 3-423
Un saut proche où la portée du saut est limitée à -128 à +127 de l'actuel Valeur EIP.
J'envisage alors trois possibilités :
- est +2 car c'est le valeur après/à l'avenir de l'EIP dans le temps d'exécution
- La valeur codée n'est pas un nombre signé codé en composante 2s.
- Cela figure dans le manuel mais je ne l'ai pas vu parce que je suis stupide.