Calculer l'opcode d'une instrcution jmp

Résolu
cs_izissise Messages postés 5 Date d'inscription mercredi 16 juin 2010 Statut Membre Dernière intervention 26 juillet 2011 - 24 juil. 2011 à 17:21
cs_ghuysmans99 Messages postés 3982 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 !

11 réponses

cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
26 juil. 2011 à 20:44
re re,

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

@++
3
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
24 juil. 2011 à 23:49
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
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
25 juil. 2011 à 12:48
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.

@++
0
cs_izissise Messages postés 5 Date d'inscription mercredi 16 juin 2010 Statut Membre Dernière intervention 26 juillet 2011
25 juil. 2011 à 12:59
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 .. :(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
25 juil. 2011 à 22:33
re,


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

@++
0
cs_izissise Messages postés 5 Date d'inscription mercredi 16 juin 2010 Statut Membre Dernière intervention 26 juillet 2011
25 juil. 2011 à 23:03
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 :)
0
cs_izissise Messages postés 5 Date d'inscription mercredi 16 juin 2010 Statut Membre Dernière intervention 26 juillet 2011
26 juil. 2011 à 17:31
[^^sad2]
0
cs_izissise Messages postés 5 Date d'inscription mercredi 16 juin 2010 Statut Membre Dernière intervention 26 juillet 2011
26 juil. 2011 à 21:55
Merci beaucoup !! j'obtiens 0x032D82CB plus cas convertir dans le bon endian !
0
cs_tboss Messages postés 2 Date d'inscription samedi 23 juin 2012 Statut Membre Dernière intervention 23 juin 2012
23 juin 2012 à 19:57
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 !
0
cs_tboss Messages postés 2 Date d'inscription samedi 23 juin 2012 Statut Membre Dernière intervention 23 juin 2012
23 juin 2012 à 20:20
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 ?
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
24 juin 2012 à 15:21
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
0
Rejoignez-nous