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
+----------------------------------+
+-------+------------------+ | Variables locales de la fonction |
| RBP | 0x7FFF...EFE0 |-------+ | (Parfois, le CPU copie RDI, RDX |
+-------+------------------+ | | ici pour faire de la place) |
| +----------------------------------+ <--- Le RSP actuel pointe ICI
+-------+------------------+ | Basses adresses mémoires
| RSP | 0x7FFF...EFC0 |-------+
+-------+------------------+