Skip to content

Glossary

Registre RIP

RIP est le pointeur d'instruction 64 bits de x86-64, qui contient l'adresse de la prochaine instruction et permet l'adressage relatif à RIP.

RIP est le pointeur d'instruction 64 bits de l'architecture x86-64, l'extension de EIP. Il contient toujours l'adresse de la prochaine instruction à exécuter. Vous ne pouvez pas écrire dans RIP avec un mov ordinaire ; il ne change qu'en effet de bord des instructions de flux de contrôle — jmp, call, ret, sauts conditionnels et interruptions.

x86-64 a ajouté une fonctionnalité sans équivalent 32 bits : l'adressage relatif à RIP. Les opérandes peuvent être encodés comme un déplacement signé depuis RIP, de sorte que le code référence ses propres données et fonctions par distance plutôt que par adresse absolue. C'est ce qui rend le code indépendant de la position (PIC) et les exécutables compatibles ASLR efficaces sur x86-64.

asm
lea rax, [rip + message]     ; adresse de 'message' relative à RIP
mov edi, [rip + counter]     ; charge un global sans adresse absolue
call printf

RIP n'a pas de sous-registres adressables par nom et aucun rôle dans les conventions d'appel comme registre d'argument ou de retour — c'est de l'état de contrôle pur.

Pourquoi c'est important en rétro-ingénierie

RIP est l'endroit où se trouve l'exécution : dans un débogueur, il vous indique l'instruction courante, et le rediriger (corrompre une adresse de retour pour que ret dépile une valeur contrôlée par l'attaquant dans RIP) est au cœur du détournement de flux de contrôle. Les opérandes relatifs à RIP comme [rip + 0x2e1f] sont la manière standard de référencer les globaux et les littéraux de chaîne, donc résoudre ce déplacement est une étape de routine lors de la lecture d'un désassemblage 64 bits.

Voir le concept général de registre et la référence assembleur. L'adressage relatif à RIP est une différence majeure dans assembleur x86 vs x64. Il est empilé et restauré via la pile gérée par le registre RSP.