2010-12-04 3 views
6


Je suis à la recherche d'un moyen (en C++/Windows) à la liste des fonctions exportées dans une DLL (et peut-être même des méthodes qui ne sont pas exportées) en utilisant dbgHelp.
Est-ce que quelqu'un sait quelle méthode peut le faire?
merci :)Liste des fonctions exportées d'une DLL

+1

double possible de [API Win32 pour énumérer les fonctions d'exportation dll?] (Http://stackoverflow.com/questions/1128150/win32-api-to-enumerate-dll-export-functions) – icecrime

+0

Un débogueur doesn Peu importe si une fonction est exportée ou non. L'exemple de code est ici: http://msdn.microsoft.com/en-us/library/ms679318%28VS.85%29.aspx –

+0

mais je regarde un cas dans lequel je n'ai pas les PDB. Est-ce que SymLoadModuleEx m'aidera ici? – Idov

Répondre

6

Il y a un code here pour le faire. Je l'ai nettoyé un peu et cela a fonctionné dans le scénario montré ci-dessous, en récupérant les noms de fonction de Kernel32.Dll.

#include "imagehlp.h" 

void ListDLLFunctions(string sADllName, vector<string>& slListOfDllFunctions) 
{ 
    DWORD *dNameRVAs(0); 
    _IMAGE_EXPORT_DIRECTORY *ImageExportDirectory; 
    unsigned long cDirSize; 
    _LOADED_IMAGE LoadedImage; 
    string sName; 
    slListOfDllFunctions.clear(); 
    if (MapAndLoad(sADllName.c_str(), NULL, &LoadedImage, TRUE, TRUE)) 
    { 
     ImageExportDirectory = (_IMAGE_EXPORT_DIRECTORY*) 
      ImageDirectoryEntryToData(LoadedImage.MappedAddress, 
      false, IMAGE_DIRECTORY_ENTRY_EXPORT, &cDirSize); 
     if (ImageExportDirectory != NULL) 
     { 
      dNameRVAs = (DWORD *)ImageRvaToVa(LoadedImage.FileHeader, 
       LoadedImage.MappedAddress, 
      ImageExportDirectory->AddressOfNames, NULL); 
      for(size_t i = 0; i < ImageExportDirectory->NumberOfNames; i++) 
      { 
       sName = (char *)ImageRvaToVa(LoadedImage.FileHeader, 
         LoadedImage.MappedAddress, 
         dNameRVAs[i], NULL); 
      slListOfDllFunctions.push_back(sName); 
      } 
     } 
     UnMapAndLoad(&LoadedImage); 
    } 
} 

int main(int argc, char* argv[]) 
{ 
    vector<string> names; 
    ListDLLFunctions("KERNEL32.DLL", names); 

    return 0; 
} 
+0

L'OP demande une solution basée sur dbghelp, qui inclurait des symboles non exportés ... – wj32

9

Si vous êtes satisfait avec d'autres outils, il existe un certain nombre qui énumère les fonctions exportées. l'un est dumpbin de Microsoft. utilisez l'option /exports.

acclamations & HTH.,

+1

La requête concerne l'utilisation de dbgHelp Apis. – Chubsdad

Questions connexes