[MASM32] Probleme de conversion

Signaler
Messages postés
4
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
13 décembre 2004
-
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
-
Bonjour,

J'ai dans EAX une valeur: 67B54
J'aimerai afficher cette valeur, plutot que la chaine correspondante, dans une MessageBox.

Merci de m'expliquer la procedure a suivre.

6 réponses

Messages postés
4
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
13 décembre 2004

Bon, j'ai "un peu resolu" le probleme...

J'ai une fonction qui prend en parametre une chaine et qui renvoie le hash md5:

MaFonction PROC uses esi Str:DWORD,dLen:DWORD 
mov esi,eax 
mov eax,Str 
push eax 
push esi 
push offset BUF_1 
call lpMD                  ;fonction de hash
mov eax,BUF_1 
ret 
MaFonction ENDP


Maintenant EAX contient une adresse qui pointe vers la zone de memoire ou se trouve le hash md5

Comment afficher ce hash (valeurs hexa) au lieu d'avoir une chaine de caracteres quand je fais:

push 0
push Str
push eax
push 0
call MessageBox

Merci pour toute info
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
include \masm32\include\masm32.inc
includelib \masm32\lib\masm32.lib

Et fais appel a dwtoa.

VOila, ++

+2(p - n)
Messages postés
4
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
13 décembre 2004

Ce qui m'amene a poser la question:
Comment utiliser dwtoa?

.data
BUF_1    db 100 dup (0)
BUFTmp db 100 dup (0)
...
push eax
push esi
push offset BUF_1
call lpMD

;maintenant BUF_1 contient l'adresse
;vers le hash (valeur hexa a afficher)

invoke dwtoa,ADDR BUF_1,ADDR BUFTmp


Ca compile mais ca plante au lancement...
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
BUF_1 est une 'chaine de caracteres' et celle ci contient une adresse ?! Ya un pb kelk part...

invoke dwtoa, eax, ADDR buffer

Debrouille toi pour avoir la valeur a convertir dans un registre, et puis appelle la fonction comme montré plus haut.
Personnellement, ce n'est kune kestion de gout, je prefere cette syntaxe :

push offset buffer
push eax
call dwtoa

Voila ++

+2(p - n)
Messages postés
4
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
13 décembre 2004

pffouulala...
Je fatigue... impossible de trouver ce qui ne va pas...
La routine du md5 tourne bien et renvoie le bon hash.

Par contre avec le dwtoa... c'est la panique a bord...

.data
BUF_1 db 100 dup (0)
BUFTmp db 100 dup (0)
...
push eax
push esi
push offset BUF_1
call lpMD

;maintenant BUF_1 contient
;le hash (valeur hexa a afficher)

mov eax,offset BUF_1
push offset BUFTmp
push eax
call dwtoa


Ce code est censé fonctionner?

En debugant:

0040118C  |. B8 36304000    MOV EAX,prog.00403036
00401191  |. 68 68304000    PUSH prog.00403068
00401196  |. 50                     PUSH EAX
00401197  |. E8 08000000    CALL prog.004011A4 ;dwtoa


00403036 contient mon hash.
EAX contient l'offset de ce hash.
00403068 est le buffer qui recoit le resultat de dwtoa
apres le dwtoa, le buffer (00403068) recoit 4206646
alors qu'il devrait recevoir le hash ci-dessous:

00403036: 9D CA F5 88 85 D1 43 A1
0040303E: E7 32 FF E8 80 26 6A 9D

Quelque chose ne va pas avec cette fonction dwtoa ?
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Ton 'hash MD5' doit etre un nombre de 32bits pour ke dwtoa marche, dans ton cas ca ne fonctionnera pas...
Essaye de voir si tu peux utiliser sprintf().

++

+2(p - n)