12
votes

Dessiner un cadre de pile pour l'assemblage X86

Donc, je suis un peu confus sur le dessin d'un cadre de pile pour mon code de montage. J'ai un sentiment que j'ai commencé mal.

Voici ce que j'ai jusqu'à présent, mais comme vous pouvez le voir, je suis confus à l'étape 5, car je pense que ma mise en page initiale est fausse.

Entrez la description de l'image ici Entrez la description de l'image ici

Pouvez-vous me dire où je me suis trompé?


0 commentaires

4 Réponses :


2
votes

La distance entre l'EBP actuel (une fois qu'il est capturée d'ESP) et y est en effet 8 octets dans ce cas car vous avez l'EIP de retour et la valeur de l'EBP précédent sur la pile. Votre diagramme est correct de ce que je peux dire si les adresses de la main gauche sont plus confuses :)


0 commentaires

0
votes

Vous avez raison avec votre diagramme. Le compilateur utilise quelques astuces d'optimisation: le premier appel est "tout à fait normal", en effet le paramètre "F" est placé sur la pile. Le deuxième appel est reporté après le nettoyage de contexte local (instruction "DISK"), et le paramètre "H" de la fonction IR "recyclé" pour contenir "2". Que le deuxième "appel" à "F" devient un "JMP" simple, car c'est la dernière ligne de la fonction d'appel "h" (le contexte de "H" a déjà été jeté par "congé").

bye!


0 commentaires

28
votes

Je pense que je commencerais avec un diagramme qui montrait une quantité (semi-) arbitraire d'espace vide au "haut" de la pile et affiche probablement EBP et ESP à gauche, avec des flèches pour montrer où ils 'Repider à. J'ai utilisé des flèches solides pour "points à" et pointillés pour le mouvement de données (rétrospectivement, il peut être préférable d'inverser cela).

texte alt


5 commentaires

Wow, c'est un diagramme froid. Quel programme avez-vous utilisé pour le dessiner? Je vais regarder dessus demain - comme mon cerveau est frit ce soir.


Je suppose que les diagrammes sont dans l'orientation de haut en bas à gauche. Ensuite, je ne sais pas comment dans le 3ème diagramme - vous avez à la fois EBP et ESP pointant vers la même adresse initialement. Je veux dire dans le diagramme précédent, ils étaient différents.


Oui - c'est le MOV% ESP,% EBP . Lorsque vous déplacez la valeur en ESP dans EBP, ils finissent par pointer vers le même endroit ...


@Jerry: Cela vous dérange-t-il si j'utilise ce diagramme dans une conférence à venir? Je vous l'attribuerais bien sûr.


@Jerrycoffin, j'ai un petit doute sur le 2e diagramme. Lorsque un appel à pousser% EBP est effectué, le premier ESP est décrémenté par 4, puis la teneur en ESP est placée à l'emplacement indiqué par ESP, créant ainsi un écart entre le vieux EBP et Y ( Paramètre).



1
votes

Le diagramme affiche les paramètres sous l'adresse de retour, qui est en fait faux.

En supposant que la pile se développe vers des adresses inférieures, s'il est nécessaire de mettre des paramètres sur la pile, ils résident à des adresses plus élevées par rapport à l'adresse de retour.


0 commentaires