Retq instruction, d'où vient-il de retour
Je suis incapable de comprendre où l'instruction de montage retq
revient à.
Je comprends que quand mon code s'exécute, puis retourner à l'adresse indiquée dans la pile. Mais comment sait-il où dans la pile l'adresse de retour se trouve?
En bref, faut-il utiliser rbp ou esp pour trouver l'adresse sur la pile?
Si vous voulez expérimenter, essayer de remplacer
retq
avec addq $8, %rsp; jmpq -8(%rsp)
. Fonctionnellement équivalent (pas en terme de performance).OriginalL'auteur Kaushal Shah | 2013-08-19
Vous devez vous connecter pour publier un commentaire.
après l'étude de l'assemblage de code, voici ma pensée:
regardons un exemple:
nous voyons qu'il y a une instruction avant retq. le "pop %rbp" (parfois, c'est un congé instruction, mais il y a de similaire) instruction
par exemple:
avant de pop de commande: le rsp a été signalé à 0x0000 0000 0000 00D0
après pop commande: 0x0000 0000 0000 00D8 (à supposer la pile augmente de haute adresse à faible adresse)
après le menu de commande, maintenant rsp point à une nouvelle adresse et retq prendre cette adresse comme adresse de retour.
OriginalL'auteur cppython