logo Homepage
+  NewbieContest
|-+  Divers» Cracking» Test Xor et autres
Username:
Password:
Pages: [1]
  Imprimer  
Auteur Fil de discussion: Test Xor et autres  (Lu 6571 fois)
deathRabbit
Profil challenge

Classement : 6356/55020

Néophyte
*
Hors ligne Hors ligne
Messages: 15


Voir le profil
« 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.
Journalisée
Iansus

Profil challenge

Classement : 52/55020

Membre Senior
****
Hors ligne Hors ligne
Messages: 262


Voir le profil WWW
« #1 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.
Journalisée
the lsd
Administrateur

Profil challenge

Classement : 183/55020

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 3098

poulping for fun & profit


Voir le profil WWW
« #2 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
Journalisée

Newbie Contest Staff :
The lsd - Th3_l5D (IRC)
Statut :
Administrateur
Citation :
Cartésien désabusé : je pense, donc je suis, mais je m'en fous !
ThunderLord
Profil challenge

Classement : 26/55020

Membre Junior
**
Hors ligne Hors ligne
Messages: 57


Voir le profil
« #3 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.
« Dernière édition: 16 Mai 2009 à 12:36:38 par ThunderLord » Journalisée

ThunderLord
deathRabbit
Profil challenge

Classement : 6356/55020

Néophyte
*
Hors ligne Hors ligne
Messages: 15


Voir le profil
« #4 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
Journalisée
ThunderLord
Profil challenge

Classement : 26/55020

Membre Junior
**
Hors ligne Hors ligne
Messages: 57


Voir le profil
« #5 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.
Journalisée

ThunderLord
Pages: [1]
  Imprimer  
 
Aller à: