diff --git a/content/secu_systeme/2_initiation_re/index.md b/content/secu_systeme/2_initiation_re/index.md index d095950..6fdb1b2 100644 --- a/content/secu_systeme/2_initiation_re/index.md +++ b/content/secu_systeme/2_initiation_re/index.md @@ -31,9 +31,9 @@ structures existent pour les manipuler : la pile et le tas. ### La pile Elle manipule des données statiques. C'est une structure de type LIFO (*Last In -First Out) qui croit vers le bas : plus on descend plus les adresse augmentent. -Sa taille est alignées sur un *int32* ou *int64* en fonction de l'architecture -(32 ou 64 bits). +First Out*) qui croit vers le bas : plus on met de données sur la pile, plus on +descend plus les adresses diminuent. Sa taille est alignées sur un *int32* ou +*int64* en fonction de l'architecture (32 ou 64 bits). *Deux "fonctions"* permettent de la manipuler : `push()` afin de placer un élément -- la pile descend alors d'une case -- et `pop()` pour reprendre un @@ -66,7 +66,7 @@ suivant: ```c int sum (int a, int b ){ - return a +b; + return a + b; } ``` @@ -100,9 +100,9 @@ sum(int, int): ``` On parle alors d'ISA pour *Instruction Set Architecture*, cela représente le jeu -d'instruction disponible. Nous y trouvons les opérations élémentaires : +d'instructions disponible. Nous y trouvons les opérations élémentaires : addition, soustraction, multiplication, division, et / ou (exclusifs ou non) -etc. Ici mon manipule les registres et la mémoire directement. Une *ISA* ne +etc. On manipule les registres et la mémoire directement. Une *ISA* ne contient pas d'opérateur avancés comme les structures de contrôles que nous pouvons trouver dans les langages de haut niveau (`while ...`, `if ... else ...`, `for ...`). @@ -114,7 +114,7 @@ l'assembleur *x86_32* pour ce cours (et quelques fois sa version 64). Mais par contre nous utiliserons **la syntaxe *Intel*** majoritairement utilisée dans le monde de l'ingénierie inverse. Cette syntaxe est plus simple : - * les suffixes de mnémoniques pour n'existes pas en syntaxe Intel, ainsi + * les suffixes de mnémoniques n'existent pas en syntaxe Intel, ainsi `movl`, `movw` ou encore `movb` deviennent **`mov`**; * les préfixes sur les registres et immédiats disparaissent : `%eax`, `$1`, `$0x0ff` deviennent **`eax`, `1` et `0x0ff`**; @@ -125,12 +125,12 @@ monde de l'ingénierie inverse. Cette syntaxe est plus simple : sécurité logicielle]({{}}) Le vocabulaire reste le même que celui vu lors des cours [d'introduction de -sécurité logicielle]({{ref "secu_logicielle/1_introduction/index.md"}}) +sécurité logicielle]({{}}) ### L'assembleur x86 : les registres -Les registres sont de petits espace mémoire directement intégrés au processeur. -Ce sont les espace mémoires les plus rapides disponible sur un ordinateur, mais +Les registres sont de petits espaces mémoire directement intégrés au processeur. +Ce sont les espaces mémoire les plus rapides disponible sur un ordinateur, mais aussi les plus petits. Il sont dédiés entre autres au stockage de données. Certains de ces registres ont des **rôles bien déterminés** par exemples : @@ -375,7 +375,7 @@ le reste sur la pile. La valeur de retour est positionnée dans `rax` pour les valeurs jusqu'à 64 bits et `rax:rdx` entre 64 et 128 bits[^retour_sysv]. [^sysv]: de `xmm0` à `xmm7` pour les flottants -[^retour_sysv] `xmm0` et `xmm1` pour les flottants +[^retour_sysv]: `xmm0` et `xmm1` pour les flottants ### Pratique