NewbieContest

Divers => Cracking => Discussion démarrée par: deathRabbit le 16 Mai 2009 à 11:55:53



Titre: Test Xor et autres
Posté par: deathRabbit le 16 Mai 2009 à 11:55:53
Bonjour,

Ya un petit truc que je comprend pas. Quand on a un
test eax, eax
ou
xor eax eax

Si je comprend bien, il fait un test ou un xor entre les valeurs du registre eax, qui sont les mêmes. Donc quelle que soit cette valeur, le résultat du test ou xor ne pourra pas varier.

Je me trompe?

Merci.


Titre: Re : Test Xor et autres
Posté par: Iansus le 16 Mai 2009 à 12:14:39
la commande XOR EAX,EAX fait un xor sur deux valeurs identiques, et renvoie le résultat dans la première opérande. C'est donc une manière esthétique de faire MOV EAX,0.


Titre: Re : Test Xor et autres
Posté par: the lsd le 16 Mai 2009 à 12:18:08
Sauf que le XOR est une opération basique pour un ordinateur, donc plus rapide qu'un MOV

Enjoy

The lsd


Titre: Re : Test Xor et autres
Posté par: ThunderLord le 16 Mai 2009 à 12:23:51
Donc quelle que soit cette valeur, le résultat du test ou xor ne pourra pas varier.

Pas tout à fait. En effet, le résultat du xor eax,eax sera toujours le même, cette instruction permet de mettre un registre à 0 (dans ce cas EAX), souvent effectuée avant des routines de calculs ou d'initialisation.

Comme l'a souligné thelsd, cette instruction est plus rapide, et prend moins de place dans l'executable(il suffit de regarder le dump hexa correspondant aux instructions pour se rendre compte que "XOR EAX,EAX" prend seulement 2 octets là où "MOV EAX,0" en prend 5...)

Par contre, le résultat d'une instruction "TEST EAX,EAX" peut varier.


Titre: Re : Test Xor et autres
Posté par: deathRabbit le 16 Mai 2009 à 15:48:42
Je ne comprend pas en quoi ce résultat peut varier. La seule variation que je comprend vient de l'utilisation de tel ou tel flag aprés ce test.

Pouvez-vous m'en dire un peu plus sur cette fonction? Ou m'indiquer un lien qui l'explique, les recherche google avec "assembleur test" ne donnent pas vraiment de résultats...

Merci


Titre: Re : Re : Test Xor et autres
Posté par: ThunderLord le 16 Mai 2009 à 17:06:16
Je ne comprend pas en quoi ce résultat peut varier.

Une petite précision s'impose ici, tout dépend de ce que l'on appelle "résultat" d'une instruction.

Pour ma part, j'ai employé le mot résultat pour désigner la valeur du registre en question après l'instruction "XOR EAX,EAX".

Pour l'instruction "TEST EAX,EAX" je considère que le résultat est l'état des flags après cette instruction, car bien entendu l'instruction "TEST" ne modifie ni l'une, ni l'autre opérande.

Petite citation du cours de deamoncrack :

Citation
  Cette instruction teste la valeur d’un ou plusieurs bits en effectuant un ET LOGIQUE sur les opérandes. Le résultat ne modifie pas les opérandes mais les indicateurs.

            Exemple :

                TEST AX,1    >> Effectue un ET LOGIQUE sur  le premier bit de AX avec 1, si il est égal à 1, ZF passera à 1 et inversement (si 0 alors ZF=0).

            Un TEST AX,AX (souvent utilisé) permet de voir si AX est égal à 0 ou non.

Le résultat(l'état des flags) sera donc bien différent suivant la valeur de EAX.