Considérez ce code assembleur x86:Déréférencer une étiquette dans l'assemblage x86
section .data
foo:
mov ebx, [boo]
mov [goo], ebx
goo:
mov eax, 2
mov eax, 3
ret
boo:
mov eax, 4
mov eax, 5
ret
Qu'est-ce qui se passe ici exactement? Lorsque je déréférence [boo]
et mov
à [goo]
quoi exactement je me déplace là-bas? Juste une commande? Le ret
aussi bien?
des questions de suivi:
- Est-ce déréférencement une étiquette me donner une adresse? Ou le code machine pour la première commande de l'étiquette?
- S'il s'agit d'un code machine, comment peut-il y avoir plus d'une commande? Toutes les commandes ne sont-elles pas essentiellement 32 bits (même si tous les bits ne sont pas utilisés)?
- Ligne de bas - est-ce que
eax
aura une valeur de 3 ou 5 à la fin?
Il semble que cela se produit au travail parce qu'ils ne sont pas pleinement des quantités 32 bits et la le dernier octet sera toujours 0. Ce code échouera si vous essayez quelque chose comme mov, eax 0xC000000 – Michael
"chercher les quatre octets" était ce que je cherchais. Merci! –