2010-12-04 22 views
6


Estoy buscando una forma (en C++/Windows) de enumerar las funciones exportadas en un archivo DLL (y tal vez incluso métodos que no se exportan) utilizando dbgHelp.
¿Alguien sabe qué método puede hacerlo?
gracias :)Listado de las funciones exportadas de un archivo DLL

+1

posible duplicado de [API Win32 para enumerar funciones de exportación DLL?] (Http://stackoverflow.com/questions/1128150/win32-api-to-enumerate-dll-export-functions) – icecrime

+0

Un depurador doesn No importa si una función se exporta o no. El ejemplo de código está aquí: http://msdn.microsoft.com/en-us/library/ms679318%28VS.85%29.aspx –

+0

pero estoy viendo un caso en el que no tengo los PDB. ¿Me ayudará SymLoadModuleEx aquí? – Idov

Respuesta

6

Hay here código para hacer esto. Lo he limpiado un poco y funcionó en el escenario que se muestra a continuación, recuperando nombres de funciones 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

El OP está pidiendo una solución basada en dbghelp, que incluiría símbolos no exportados ... – wj32

9

si está satisfecho con otras herramientas, entonces hay un número que enumera las funciones exportadas. uno es el dumpbin de Microsoft. use la opción /exports.

aplausos & HTH.,

+1

La consulta se trata de usar dbgHelp Apis. – Chubsdad

Cuestiones relacionadas