J'essaie d'appeler Voici ce que mon code ressemble à: p> Comment Déterminez ce qu'est-ce que Alternativement, y a-t-il une meilleure méthode de recherche des symboles correspondant à une adresse donnée à partir d'un fichier PDB? p> p> SymloadModuleEx code >
pour charger les symboles à partir d'un fichier PDB, puis utilisez symbromaddr code>
pour rechercher les symboles de ce PDB. Cependant, je ne peux pas comprendre ce qu'il faut passer pour les paramètres baseofdll code> et
dllsize code> - la documentation explique explicitement que lors du chargement d'un fichier PDB, ces paramètres ne peuvent pas être 0, et en train de tenter de passer 0 des résultats en échec avec
error_invalid_paramètre code>.
baseofdll code> et
Dllsize code> pour transmettre lors du chargement d'un fichier PDB? Le fichier PDB en question est le fichier de symboles d'un autre programme exécutable (pas une DLL) et uniquement pour des arguments, supposons que vous n'avez pas accès à l'EXE d'origine à partir duquel le PDB a été généré. P >
3 Réponses :
dbghelp.dll et the Spécifiquement, pour charger un PDB connu et rechercher un symbole basé sur une adresse, vous pouvez procéder comme suit: p>
Aucun de cela ne nécessite l'image d'origine; Seul le PDB est requis. En supposant que vous utilisez Visual Studio, les en-têtes et les bibliothèques de Dia sont disponibles sous (par exemple): SYM * code> Les méthodes utilisent ici le Accès d'interface de débogage (dia) sdk. 1 sup>
DIA lui-même est basé sur COM et beaucoup plus flexible que ce que propose DBGHELP. P>
IdiaDataSource :: LoadDataFrompdb Code> a > charger un PDB spécifique (taille DLL et adresse de base ne sont pas nécessaires). LI>
IDIADataSource :: OpenSession Code> A > Pour obtenir le
, respectivement, pour obtenir le Idiasession code>
pour votre Source de données. LI>
windsymbolbyva code>
ou FINDSYMBOLBYRVA CODE>
idiasymbol code>
associé à cette adresse. LI>
idiasymbol :: get_name code >
pour obtenir le nom de la fonction contenant l'adresse que vous avez spécifiée. LI>
ol>
C: \ Fichiers du programme (x86) \ Microsoft Visual Studio 10.0 \ dia sdk code>. p>
L'échantillon DI2DUMP fonctionne bien pour moi dans la résolution de l'adresse virtuelle relative (adresse de charge du programme EIP) sur PDB pour les pointeurs de fonction non résolus. C'est la façon dont j'essaie: par exemple:
Fonction: [00447B60] [0001: 00446b60] ServerConfig :: GetsSlConfig (Public: Struct SSL_Config __cdecl ServerConfig :: getSlconfig (void) __ptr64) P> Ici, le RVA est 00447B60 [EIP - Adresse de charge de processus]
Le segment est 0001
Le décalage est 00446b60 p> p>
Je n'ai pas permitions à commentaires, donc le fera en réponse séparée. P>
DbgHelp est compact et a recommandé de distribuer des copies privées avec votre application par Microsoft. Voir « Les politiques de redistribution pour ces inclus DLLs ont été spécialement conçues pour le rendre aussi facile que possible pour les personnes à inclure ces fichiers dans leurs propres packages et la libération " p> li>
Je ne trouve pas la façon comment télécharger des fichiers PDB à l'aide des interfaces DIA. Sym API permet. il délègue les appels à SymSrv.dll. p> li> ol>
Alors question initiale est toujours réelle. Strong> p>