2010-09-25 19 views
1

Est-ce que quelqu'un sait si/comment je peux lire de la callstack à partir d'une adresse spécifique? supposer que j'ai une adresse de décalage de l'adresse de base de la callstack, comment puis-je obtenir l'adresse de base?adresse Callstack

merci :)

+0

C++ sur windows. – Idov

Répondre

0

Cela dépend de la plate-forme avec force ABI sur lequel l'exécutable est en cours d'exécution. Je recommande d'utiliser l'un des outils de désassemblage acceptés pour votre plate-forme de choix, ces outils peuvent généralement aider à obtenir de telles informations. Par exemple, IDA Pro pour Windows et Linux.

+0

J'utilise C++ sur Windows, et j'essaie de le faire par programmation ... – Idov

+0

@Idov: encore vous devez utiliser un outil de démontage pour voir les décalages qui vous intéressent. Je doute que vous obtiendrez un livre de cuisine solution ici sur SO –

+0

J'utilise StackWalk64 pour obtenir le décalage. :) – Idov

0

Dans les fenêtres, vous avez un API pour marcher le complet callstack:

Voir cet exemple codeproject.com

+0

Je sais, mais j'ai besoin de l'adresse absolue du pointeur de trame. :) – Idov

+0

Désolé, je n'ai pas de boîte Windows pour l'essayer immédiatement, mais ce n'est pas le paramètre Offset dans ADDRESS64 retourné pour AddrFrame exactement ce que vous voulez? Sauf si vous utilisez un ancien modèle de mémoire, ce serait directement la position absolue du pointeur d'image. Ai-je tort? :) – Javier

+0

Le AddFrame retourné de StackWalk contient seulement "offset" ... – Idov

1

Adresse de base de la pile se trouve dans le registre ESP sur l'architecture x86 de Windows. Vous pouvez afficher ESP dans le débogueur Windows 'de Registres'

+0

Donc, si j'ai une adresse relative de pointeur de cadre de certains méthode (retourné par StackWalk64), tout ce que j'ai besoin de faire pour obtenir l'adresse absolue est d'ajouter le relatif à l'ESP? – Idov

+0

Je suis désolé si c'est une question stupide, mais je suis un peu confus en ce moment ... – Idov

+0

En stack x86 pousse de la mémoire plus élevée à la mémoire inférieure.Donc EBP vous devez réellement soustraire/(ou de l'ESP vous devrait ajouter) – Chubsdad