La mémoire


<< Les permissions sur les fichiers L'allocation de la mémoire >>


I°) Qu'est-ce que la mémoire ?

   Le terme "mémoire" peut paraître très compliqué de prime abord, mais rappellez-vous qu'au final, un ordinateur n'est rien de plus qu'un calculateur géant. Ainsi, la mémoire est simplement un ensemble de bytes (ou octets) qui permettent de stocker temporairement des valeurs et qui sont repérés par des adresses. Ces valeurs stockées sont donc accessibles par ces adressess et n'importe quel octet à n'importe quelle adresse peut être lu ou modifié à souhait. Nous parlerons ici des processeurs Intel x86 à adressage à 32 bits (tout sera similaire mais doublé en 64 bits ou en 2*32 bits). Utiliser un adressage à 32 bits signifie que les adresses sont composées de 32 chiffres (soit 4 bytes car 1 byte est constitué de 8 bits et 8*4 = 32), il y a donc 232 possibilités d'adresses, soit 4 294 967 296 adresses différentes. Les variables d'un programme ne sont donc rien de plus que certains endroits de la mémoire qui sont utilisés pour garder l'information.
Les pointeurs sont un type spécial de variables qui ne prennent que 4 bytes en mémoire et contiennent une autre adresse mémoire. Ce type de variable peut paraître superficiel mais ne l'est pas du tout ; en effet, la mémoire ne peut pas être déplacée. Par conséquent, pour la réutiliser il est nécessaire de la recopier, ce qui peut demander à la fois beaucoup de ressources, voire de temps quand une action est répétée beaucoup de fois, et aussi bien évidemment d'espace mémoire. Ainsi, on comprend l'intérêt de n'avoir à passer qu'une petite variable de 4 bytes qui permet d'indiquer à de nouvelles fonctions l'emplacement du bloc de données dans la mémoire.
Le processeur lui-même a aussi sa propre mémoire, relativement réduite. Elle contient des données essentielles au bon fonctionnement de vos ordinateurs : les registres, qui permettent de garder des traces de ce qui se passe pendant l'éxécution de programmes. Le plus remarquable sûrement est l'EIP (extended instruction pointer). L'EIP est un pointeur qui garde l'adresse de l'instruction qui est en cours d'éxécution. D'autres registres connus et importants sont ESP (extended stack pointer) et EBP (extended base pointer). Ces trois registres sont primordiaux pendant l'éxécution d'un programme, ce que nous aurons l'occasion d'expliquer dans la section "segmentation de la mémoire d'un programme". Mais avant, nous allons rapidement expliquer l'allocation de la mémoire et le placement des variables en mémoire en utilisant le formidable outil qu'est le langage C.

<< Les permissions sur les fichiers L'allocation de la mémoire >>



18 Commentaires
Afficher tous


Anonyme 16/03/13 03:33
J'ai tout compris. Tout. Merci

Anonyme 12/02/13 12:21
Ca me parait acceptable

Pr3acher 02/10/12 16:08
Tout bon, merci S3cur3D, j'utilise strtoul() qui marche impec en base 16 meme si il reste quelques problèmes mais bon... Merci !

FrizN 02/10/12 09:17
Le code paraît bon, après je sais pas ce que tu as entré. atoi() prend des nombres en base 10, strtoul va te permettre de spécifier la base et donc d'avoir de l'hexa (j'imagine que pour patcher c'est ce que tu utilises ?)




Commentaires désactivés.

Apprendre la base du hacking - Liens sécurité informatique/hacking - Contact

Copyright © Bases-Hacking 2007-2014. All rights reserved.