[ASM] Petit problème de division

Tout sur les langages de programmation.

[ASM] Petit problème de division

Messagepar eabcdx » 18 Septembre 2013, 22:23

Hey salut à tous :)

je fais appel à vous car quelque chose m'échappe.

J'analysais un logiciel pour tenter de reverse une fonction qu'il utilise. A un moment, le programme effectue une division sur le registre ECX
Code: Tout sélectionner
DIV ECX


Juste avant l'instruction DIV, les registres EAX, ECX et EDX sont respectivement initialisés avec les valeurs suivantes (dans l'ordre): 0x48AE5F8F, 0x00989680 et 0x003102D4.

Une fois l'instruction DIV passée, je me retrouve avec les valeurs suivantes (toujours dans l'ordre) : 0x523A161F, 0x00989680 et 0x0046260F.

Donc via la calculette de windows, j'ai essayé de retrouver ces résultats mais impossible d'y parvenir.
Normalement, le DIV fait ceci :
EAX = EAX / ECX;
EDX = EAX % ECX;

Cependant, impossible de trouver les résultats corrects. Si je pars dans l'autre sens, à savoir EAX * ECX + EDX je retrouve bien la valeur de EAX avant le DIV.

Si vous avez une idée elle sera la :bienvenue: , je sens que c'est une erreur très bête mais concernant les maths, je ne suis plus très très fort...

Merci d'avance ;)
Dernière édition par eabcdx le 20 Septembre 2013, 22:10, édité 1 fois.
eabcdx
Crackeur de bas niveau
Crackeur de bas niveau
 
Messages: 131
Inscription: 03 Novembre 2012, 14:44

Re: [ASM] Petit problème de division

Messagepar eabcdx » 20 Septembre 2013, 22:10

Comme prévu, c'était tout bête.

D'après la doc, on "concatène" EDX avec EAX et on divise par ECX, ce qui donne avec mon exemple :
EAX = 0x3102D448AE5F8F / 0x989680;
EDX = 0x3102D448AE5F8F / 0x989680;

Par conséquent, on retrouve bien le résultat attendu.
eabcdx
Crackeur de bas niveau
Crackeur de bas niveau
 
Messages: 131
Inscription: 03 Novembre 2012, 14:44


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Bing [Bot] et 1 invité

cron