Cours généraux sur l

Cours généraux sur l'hexadécimal

J'ai reçu de nombreux Email me demandant comment fonctionne l'héxadécimal, je pense qu'il est temps de faire un topo sur le sujet car de trop nombreux lecteurs ignorent encore comment ça marche ...

Je passe sur la notation binaire, les registres de processeur et sur l'utilisation de l'asm ... Si vous ne savez pas çela, je vous conseille fortement de vous réferer à ma partie librairie dans les outils.

Alors plusieurs personnes m'ont demandé comment ca marche les trucs en hexa, c'est simple, on va commencer par le début : lorsque vous programmez dans un langage évolué type pascal ou C, vous inscrivez vos fonctions et procédures, puis vous compilez le code, ce code compilé doit être compréhensible par le processeur, en effet ne croyez pas que la fonction strcpy par exemple, est directement compréhensible par le processeur, cette fonction fait partie intégrante du C pour vous faciliter la tâche, lorsque vous effectuez une compilation, le compilateur "traduit" le code en un langage directement compréhensible par le processeur, ainsi la fonction strpcy sera traduit en instructions Asm telles que :

mov cx,nbre_de_lettres
mov di,offset_de_destination
mov si,offset_source
mov es,segment_destination
mov ds;segment_source
rep movsb

Voilà en gros, les puristes asm vont crier au scandale, puisqu'on ne peut pas modifier un registre de segment directement, mais c'est pour résumer.
Ceci est donc le code traduit en Assembleur, langage le plus proche du processeur. Lorsque vous compilez, votre compilateur converti donc votre code en code assembleur, mais ce code assembleur est "codé" en hexadecimal, ainsi l'instruction mov possède un seul codage hexadécimal, de même pour l'instruction Jmp par exemple qui se code sur 0xEB (je passe sur les détails de Jmp near et Jmp far), donc chaque code en héxadécimal correspond soit à une instruction, soit à une donnée ...
Quand vous executer un programme en mémoire, le système converti ces données hexadécimales en langage machine pur compréhensible par le processeur ... Là il faut faire une remarque importante : le langage Assembleur n'est que du pseudo-code, ce langage est ensuite transformé en binaire pour le processeur, quand vous débugez sous Soft-Ice et voyez un call xxxx:yyyy, ne croyez pas que c'est comme ca, c'est soft-Ice qui vout fait la conversion, s'il ne la faisait pas, vous n'auriez qu'une suite incompréhensible de 0 et de 1 ....

Résumé : Quand vous programmez, votre compilateur converti votre code en langage en lanagage assembleur qui est codé en héxadécimal pour une facilité de stockage, chaque code héxadécimal correspond à une instruction machine ou à une donnée, lorsque vous lancez le programme, le système transmute ces infos héxadécimales en lanagage binaire directement compréhensible par le processeur. C'est pourquoi dans un fichier EXE vous trouvez qu'une suite héxadécimale, et modifiant un chiffre hexa, on modifie une instruction du programme.

J'espère que j'ai été assez clair, je sais que c'est vraiment débutant, mais l'information doit être accessible à tous, le style peut paraitre un peu lourd, mais j'ai fait ca un peu rapidos, entre deux cracks ou entre deux parties de Quake ;)

 

That's all folk !

Si vous avez des questions : cyberbobjr@yahoo.com


Capturé par MemoWeb à partir de http://members.tripod.com/~cyberbobjr/cours_gen.htm le 03/06/98