Votre fragment de code ressemble au code d'entrée utilisé par certains processeurs et compilateurs. Le code d'entrée est le code d'assemblage qu'un programme de compilation émet lors de l'entrée d'une fonction.
Le code d'entrée est responsable de l'enregistrement des paramètres de la fonction et de l'allocation de l'espace pour les variables locales et, éventuellement, de leur initialisation. Le code d'entrée utilise des pointeurs vers la zone de stockage des variables. Certains processeurs utilisent une combinaison des registres EBP et ESP pour pointer vers l'emplacement des variables locales (et des paramètres de fonction).
Depuis le compilateur sait où les variables (et les paramètres de fonction) sont stockés, il laisse tomber les noms de variables et utilise l'indexation numérique. Par exemple, la ligne:
movl 8(%ebp), %eax
serait soit déplacer le contenu de la 8ème variable locale dans le registre EAX
, ou déplacer la valeur à 8 octets à partir du début de la zone locale (en supposant que les EBP
pointeurs de registre à le début de la zone variable locale).
L'instruction:
subl $24, %esp
implique que le compilateur se réserve 24 octets sur la pile. Cela peut être pour protéger certaines informations dans la convention d'appel de fonction. La fonction serait en mesure d'utiliser la zone après cela pour son propre usage. Cette zone réservée peut contenir des paramètres de fonction.
Le fragment de code que vous avez fourni ressemble il compare deux variables locales dans une fonction:
void Unknown_Function(long param1, long param2, long param3)
{
unsigned int local_variable_1;
unsigned int local_variable_2;
unsigned int local_variable_3;
if (local_variable_2 < local_variable_3)
{
//...
}
}
Essayez désassembler la fonction ci-dessus et voir à quel point elle correspond à votre fragment de code.
merci qui a aidé à effacer certaines choses:) – GetOffMyLawn
Pour ceux qui veulent faire une triche rapide. Juste dans cet ordre: 1) Lire l'opérande droit de cmpl, 2) lire la deuxième lettre de l'instruction de saut, et 3) lire l'opérande gauche de l'instruction de comparaison. Donc dans ce cas: if ('% eax' est' [l] ess than' 'ebp [12]'). Devrait vous aider à lire le code rapidement – bluejamesbond