La pile
Comprendre le schéma de la pile :
PROCESSEUR (CPU) MÉMOIRE VIVE (RAM)
(Là où vivent les registres) (Là où vivent le code et la pile)
1. Registres d'arguments Segment de Code (Les instructions)
+-------+------------------+ +----------------------------------+
| RDI | 1er argument | +------> | 0x400511: PUSH RBP |
+-------+------------------+ | | 0x400512: MOV RBP, RSP | <--- [Le "Nouveau RIP"] pointe ici !
| RSI | 2ème argument | | | 0x400515: SUB RSP, 32 |
+-------+------------------+ | | ... |
| RDX | 3ème argument | | +----------------------------------+
+-------+------------------+ |
| RCX | 4ème argument | |
+-------+------------------+ | La Pile (Stack)
| R8 | 5ème argument | | Hautes adresses mémoires
+-------+------------------+ | +----------------------------------+
| R9 | 6ème argument | | | Argument 8 (si existant) | <- (Sur la pile car on n'a plus
+-------+------------------+ | +----------------------------------+ de registres disponibles)
| | Argument 7 (si existant) |
2. Pointeurs de contrôle | +----------------------------------+
+-------+------------------+ | | Adresse de retour (Ancien RIP) | <- Pour revenir à la fonction d'avant
| RIP | 0x400512 |-------+ +----------------------------------+
+-------+------------------+ | Ancien RBP (sauvegardé) | <--- Le RBP actuel pointe ICI
| RBP | 0x7FFF...EFE0 |-------+ +----------------------------------+
+-------+------------------+ | | Variables locales de la fonction |
| BUF | 0x7FFF...EF.. | | | (Parfois, le CPU copie RDI, RDX |
+-------+------------------+ | | ici pour faire de la place) |
| RSP | 0x7FFF...EFC0 |-------+ +----------------------------------+ <--- Le RSP actuel pointe ICI
+-------+------------------+ Basses adresses mémoires
RBP : Register base pointer
Il sert de référence stable au début du stack frame et est souvent utilisé comme andre fixe pour accéder aux variables locales à l'intérieur d'une fonction
RSP : Register stack pointer
Placé au sommet de la pile (donc à l'adresse la plus basse), le RSP contient automatiquement la valeur de RIP après une instruction CALL et avant le JMP.
RIP : Register instruction pointer
Il indique au CPU ou il en est dans le code en pointant vers la prochaine instruction de code à exécuter.
No comments to display
No comments to display