Instructions cmp + jl

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

je suis un vrai débutant en asm x86 et je dois analyser un stub dans le cadre de mes études.

1
2
cmp eax, 5000h
jl short loc_423004

Si je comprends bien, la première ligne calcule 5000h - eax. Et si eax était effectivement plus petit que 5000h, alors on saute au label loc_423004.

En gros c'est pareil que

1
2
3
if (eax < 5000) {
    goto: loc_423004
}

Merci d'avance

+0 -0

Cette réponse a aidé l'auteur du sujet

En réalité, c'est un peu plus fourbe que cela. Déjà, la première ligne calcule eax - 5000h et non le contraire, ensuite elle positionne les flags en fonction du résultat.

De son côté, jl saute au label fourni en opérande si les flags OF et SF sont différents. Cela se produit si eax interprété comme un entier signé est inférieur à 5000h. Par exemple, si eax contient 80000000h, le saut sera effectué.

C'est important, parce qu'il existe aussi l'instruction jb, qui ne saute que si eax interprété comme un entier non signé est inférieur à l'opérande donné. Avec mon exemple, jb ne sauterait pas.

#JeSuisGrimur #OnVautMieuxQueÇa

+0 -0
Auteur du sujet

Merci pour ta réponse. En fait l'exemple que j'ai est bien plus long, et au début eax est mis à zéro via un xor eax, eax. Puis incrémenté, jusqu'à atteindre la limite de 5000h. Le but de l'exo est de décrire le fonctionnement de cet unpacker.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte