Skip to main content

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.