recherche de vulnérabilités / 1. le CPU
Le CPU et le cycle d'une instruction
Un processeur ne fait qu'une chose, en boucle : lire l'instruction pointée par EIP, la décoder, l'exécuter, ranger le résultat. On suit deux instructions déjà en RAM.
0x1000: B8 05 00 00 00 mov eax, 5
0x1005: 83 C0 03 add eax, 3
1. Lire EIP2. Fetch3. EIP avance4. Decode5. Execute6. Writeback
À retenir
- Unité de contrôle (CU) : lit et décode les instructions, puis commande les autres blocs.
- ALU (unité arithmétique et logique) : fait les calculs (
add,sub,and,xor,cmp…) et met à jour EFLAGS. - Registres : quelques cases de 32 bits dans le CPU, beaucoup plus rapides que la RAM. Détail des registres.
- RAM : code et données y sont mélangés (architecture de von Neumann). Le CPU y accède par le bus d'adresse (où ?) et le bus de données (quoi ?).
- EIP avance avant l'exécution : pendant un
call, il pointe déjà sur l'instruction suivante, et c'est cette valeur qui est empilée comme adresse de retour. - Pour le CPU, des octets en RAM ne sont que des octets : si EIP pointe sur des données contrôlées par un attaquant (un shellcode), il les exécute. D'où le bit NX qui interdit l'exécution de la pile et du tas.