Besion info importante assembleur/desassembleur [Résolu]

Signaler
Messages postés
24
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
1 février 2005
-
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
-
Bonjour,

je suis présentement en train de modifier un fichier execute que jai décompiler avec W32Dasm et toute mes modifications jusqu'a présent sont parfaite mais je bloc sur une seul et derniere chose.

J'ai changer une "procedure" de place mais je ne sais pas comment réécrire les JMP CALL ect;

voici la "procedure"

:004547A7 A114AE6E00 mov eax, dword ptr [006EAE14]
:004547AC 8B8C30CC010000 mov ecx, dword ptr [eax+esi+000001CC] ECX = total gold
:004547B3 85C9 test ecx, ecx
:004547B5 7405 je 004547BC
:004547B7 E806E1FFFF call 004528C2
:004547BC E944680000 jmp 0045B005

je doit mettre cette procedure a loffset :00409428

comment faire pour modifier le "jmp 0045B005" par exemple qui se retrouvera a :004547CF

en gros je voudrai savoir commen recalculer la valeur hexadecimal;
je sais que E9 veu dire "jmp" mais je ne sais pas comment est calculer ladresse :004547BC E944680000
E9 = jmp
4680000 = 0045B005 -> comment sa fait ici?

merci de votre aide!

The Universal ßð¥

3 réponses

Messages postés
570
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
18 janvier 2021
2
Salut,
D'habitude on trouve une adresse relative,c'est a dire :
on part de l'adresse du jmp 004547BC , on prend l'adresse d'arrivée 00409428 ,on fait une soustraction ou une addition en prétant attention au fait que le déplacement peut être négatif ou positif.
Pour y voir plus clair ,prendre l'exemple non modifié:
004547BC E944680000 jmp 0045B005
soustraire 4547BC de 0045B005,si l'opération es bonne on retrouve les chiffres suivants de l'instruction 4468 sinon faire l'inverse.
Pour des informations plus pointues sur les instructions voir le livre deux d'intel

ToutEnMasm
Messages postés
24
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
1 février 2005

J'avais déja trouver une solution:

dans win32dasm, si on fait debug et ensuite patch code,
le code asm est retranscrit avec le code hexadecimal.

Cela ma permis de continuer mes modifs mais sans comprendre vraiment pourquoi, mais grace a ta reponse je comprend, ce qui me permet dans savoir plus sur l'asm, code que j'aimerais bien maîtriser!

Merci de ton aide!

The Universal ßð¥
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

c pratiquement exacte sauf qu'il faut prendre l'adresse de l'instruction suivante du jmp.

exemple Masm:

@@:
jmp @B te donne le code 0EBh,0FEh

EBh c le code jmp +/- byte
FEh etant le déplacement. ( -2 et pas 0 )

@++