Calculer l'opcode d'une instrcution jmp [Résolu]

Messages postés
5
Date d'inscription
mercredi 16 juin 2010
Statut
Membre
Dernière intervention
26 juillet 2011
- - Dernière réponse : cs_ghuysmans99
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
- 24 juin 2012 à 15:21
Bonjour,

J'aimerais "calculer" l'opcode d'une instruction jmp avec une adresse ou sauté aléatoire bref mes recherche google n'ayant rien donner je me tourne vers vous !

007C7D30 - E9 CB821603 jmp 03930000

En fait je vois pas le lien entre 007C7D30, CB821603 et 03930000.
Merci a vous et très bonne journée !
Afficher la suite 

11 réponses

Meilleure réponse
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
3
Merci
re re,

vr = adr_dst > 0x7C7D35 ? adr_dst - 0x7C7D35 : (0x7C7D35 - adr_dst) * -1;

@++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_patatalo
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
11
0
Merci
Regarde du côté du Intel® 64 and IA-32 Architectures Software Developer’s Manual, LA référence pour ce qui est du langage machine x86. Partie utile : Vol 2A. Le seul problème c'est qu'il faut comprendre ce qui y est dit

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Commenter la réponse de cs_ghuysmans99
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
0
Merci
salut,


Il y a 2 types d'instructions de saut. L'une est relative à l'adresse suivant l'instruction de saut (+ ou - valeur donne l'adresse pointée comme pour le call). L'autre est absolue, la valeur indique l'adresse pointée.

@++
Commenter la réponse de cs_patatalo
Messages postés
5
Date d'inscription
mercredi 16 juin 2010
Statut
Membre
Dernière intervention
26 juillet 2011
0
Merci
D'apres le manuel c'est cette inscrution :
E9 cd JMP rel32 A Jump near, relative, RIP =
RIP + 32-bit displacement sign extended to 64-bits

donc 7c7d30 + cb821603 devrais me donner l'adresse de destination (3930000), mais ce n'est pas le cas .. :(
Commenter la réponse de cs_izissise
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
0
Merci
re,


déjà, 0xcb821603 est une valeur négative.

@++
Commenter la réponse de cs_patatalo
Messages postés
5
Date d'inscription
mercredi 16 juin 2010
Statut
Membre
Dernière intervention
26 juillet 2011
0
Merci
Dsl mais j'arrive toujours pas a comprendre quelle pourrait me montrer le calcule entre l'adresse source et celle de destination ?

ps: je ne vous mais pas dit que j'utilisais cheat engine enfin bref quand je copie la ligne avec ce jmp jai : 007C7D30 - E9 CB822D03 - jmp 03AA0000 : [MD2_Final+251A67]
pour info l'adresse de MD2_Final est C36C60.

pss: Les adresse sont différente car l'allocation est dynamique (c'est pour ça qu'il faudrait que je calcule l'opcode dynamiquement aussi.)

Merci :)
Commenter la réponse de cs_izissise
Messages postés
5
Date d'inscription
mercredi 16 juin 2010
Statut
Membre
Dernière intervention
26 juillet 2011
0
Merci
[^^sad2]
Commenter la réponse de cs_izissise
Messages postés
5
Date d'inscription
mercredi 16 juin 2010
Statut
Membre
Dernière intervention
26 juillet 2011
0
Merci
Merci beaucoup !! j'obtiens 0x032D82CB plus cas convertir dans le bon endian !
Commenter la réponse de cs_izissise
Messages postés
2
Date d'inscription
samedi 23 juin 2012
Statut
Membre
Dernière intervention
24 février 2014
0
Merci
J'ai un problème du même style : j'ai l'opcode et l'adresse d'un saut et je veux récupérer l'adresse vers laquelle le saut s'effectue.

5DAA0756 - E9 A5F89FB4 - jmp 124A0000

Je souhaite récupérer à partir d'un programme externe l'adresse 124A0000 en lisant l'opcode à l'adresse 5DAA0756.
Comment faire ?
Merci d'avance !
Commenter la réponse de cs_tboss
Messages postés
2
Date d'inscription
samedi 23 juin 2012
Statut
Membre
Dernière intervention
24 février 2014
0
Merci
On peut pas éditer ?
A l'aide de la fonction ci dessus je trouve que dst = opcode - adresse actuelle si dest < adresse actuelle, ce qui est le cas.
Après calcul je trouve malheureusement 484E985E et non pas 124A0000.
Il y'a une histoire d'endian ? Comment je convertis ?
Commenter la réponse de cs_tboss
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
11
0
Merci
Pour le faire "à la main", tu convertis l'opérande : A5|F8 9F|B4 -> B4|9F F8|A5. On travaille en arithmétique signée (déplacement relatif, c'est un jmp near), le bit de poids signe est à 1, donc on prend le complément à deux (=1+not x) du déplacement et on le soustrait à l'adresse de la prochaine instruction (5DAA0756+5).

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Commenter la réponse de cs_ghuysmans99