Skip to content

Glossary

Registre RSP

RSP est le pointeur de pile 64 bits de x86-64, pointant toujours vers le sommet de la pile d'appels courante et géré par push, pop, call et ret.

RSP est le pointeur de pile 64 bits de l'architecture x86-64, l'extension de ESP. Il contient toujours l'adresse du sommet de la pile courante, laquelle sur x86 croît vers le bas, vers les adresses basses. Le processeur met à jour RSP automatiquement : push soustrait 8 et stocke, pop charge et ajoute 8, call empile l'adresse de retour, et ret la dépile.

RSP n'est ni un registre d'argument ni de retour dans aucune convention, et il est implicitement préservé — chaque fonction est censée le laisser exactement tel qu'elle l'a trouvé. La System V AMD64 ABI comme la Microsoft x64 ABI exigent un alignement de pile sur 16 octets au moment d'un call, et Windows impose en outre 32 octets d'« espace fantôme » (shadow space) réservés par l'appelant.

Mécanique

asm
push rbp             ; RSP -= 8, stocke l'ancien rbp
mov  rbp, rsp        ; pointeur de cadre = sommet courant
sub  rsp, 0x20       ; réserve 32 octets de locales
; ... corps de la fonction ...
leave                ; mov rsp, rbp ; pop rbp
ret                  ; dépile l'adresse de retour dans RIP

Ses sous-registres esp, sp et spl existent mais ne sont presque jamais utilisés directement, car toucher au pointeur de pile de manière étroite corromprait l'alignement.

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

RSP est votre point d'ancrage pour lire la pile : locales, registres déversés et arguments passés sur la pile sont tous adressés relativement à lui (ou à RBP). Suivre sub rsp, N révèle la taille d'un cadre, et un RSP incohérent au ret est un signe classique de corruption de pile ou d'exploit.

Voir le concept général de registre et la référence assembleur. Les différences de disposition de pile sont abordées dans assembleur x86 vs x64. Il travaille aux côtés du registre RBP, le pointeur de cadre optionnel.