2010-03-30 5 views
0

Je dois obtenir un cadre de pile d'une fonction à partir de n'importe quel PDB (tous les arguments in/out et leurs types). J'ai le nom de la fonction et l'adresse d'une certaine fonction de PDB, est-il un moyen d'obtenir tous les paramètres (in/out) de cette fonction à partir du fichier PDB?Comment obtenir StackFrame au moment de la compilation à partir de PDB?

Les fonctions sont écrites en code non managé.

Cordialement,

Usman

Répondre

2

Vous avez un tas de concepts. PDB comme tout autre fichier ne contient pas de cadres de pile ou de pile, car c'est quelque chose qui est créé pendant l'exécution. .net exe/dll contient des métadonnées pour les classes afin que vous puissiez jeter un coup d'oeil à la signature des méthodes. Vous pouvez obtenir des cadres de pile dans votre code (google class StackFrame/StackFrame) mais vous ne pouvez toujours pas toutes les données de la pile comme les valeurs des paramètres.

+0

Yeha après avoir posé la question, j'ai eu le concept d'écriture et j'ai pensé à la pile au moment du runt, pas au moment de la compilation. Alors, comment puis-je obtenir tous les paramètres de la fonction en utilisant PDB (probablement en utilisant dbghelp) J'ai extrait toutes les fonctions nom et leurs adresses, mais j'ai besoin de paramètres qu'ils prennent en entrée/sortie. Est-ce que je peux obtenir aussi ces params d'employer PDB juste comme j'obtiens des noms et des adresses de fonction – Usman

+0

que voulez-vous dire par des paramètres? valeurs ou définitions? – Andrey

+0

Juste des définitions ..? Au moment de la compilation, j'ai besoin du nom de la fonction et de son adresse (que j'ai obtenu de PDB en utilisant dbghelp) maintenant il ne reste plus qu'une chose: combien d'arguments faut-il prendre et quels sont les TYPES d'arguments? virgule séparée – Usman

1

Il est impossible d'obtenir un cadre de pile au moment de la compilation. La pile est un concept d'exécution.

1

Pour extraire les noms de fonctions, les adresses et les types d'arguments d'un cliché, vous pouvez utiliser le programme dia2dump. Il est disponible en tant qu'échantillon du SDK Access Debug Interface (dia-sdk). Vous pouvez le trouver avec Visual 2008 ou 2010 sous C:\Program Files\Microsoft Visual Studio (your version)\DIA SDK\Samples\DIA2Dump

+0

ouais j'ai trouvé celui-ci et j'ai presque terminé ma tâche. La seule chose qui reste comme référencé DIA2Dump est, il montre réellement tout (TOUS les symboles liés à KERNEL, Os Symbols quand je lui donne PDB dont je n'ai pas besoin) J'ai seulement besoin de mes symboles qui sont définis dans ma DLL/EXE/PDB. comme j'ai une DLL dans laquelle certains symboles sont symbol001 (int x, int y) et puis symbol002 (int x3, int x4) ... J'ai seulement besoin de ces 2 pas tout à partir des importations de niveau Kernal et le ciel est le limite. – Usman

+0

J'utilise get_symbolsFileName par lequel je peux tracer des symboles d'où ils viennent. Mais il échoue et ne me donne aucune information concernant le fichier de symboles comme xyz.obj ou tout autre fichier d'où viennent ces symboles. Pour que je puisse filtrer mes symboles que je désirais un peu comment de cette façon. – Usman

Questions connexes