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