2010-12-04 18 views
6


DbgHelp kullanarak bir DLL (ve hatta dışa aktarılmayan yöntemler) dışa aktarılan işlevleri listelemek için bir yol arıyorum (C++/Windows).
Hangi yöntemin yapabileceğini bilen var mı?
TeşekkürlerBir DLL dışa aktarılan işlevlerini listeleme

+1

olası yinelenen [dll ihracat işlevlerini numaralandırılamadı Win32 API?] (Http://stackoverflow.com/questions/1128150/win32-api-to-enumerate-dll-export-functions) – icecrime

+0

Bir ayıklayıcı doesn Bir fonksiyonun ihraç edilip edilmediğine bakmak. Kod örneği burada: http://msdn.microsoft.com/en-us/library/ms679318%28VS.85%29.aspx –

+0

Ancak PDB'lere sahip olmadığım bir duruma bakıyorum. SymLoadModuleEx bana yardım edecek mi? – Idov

cevap

6

bunu yapmak için kod here yoktur. Biraz temizledim ve aşağıda gösterilen senaryoda çalıştı, fonksiyon isimlerini Kernel32.Dll'dan aldım.

#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

OP, dışa aktarılamayan sembolleri içerecek dbghelp tabanlı bir çözüm istiyor ... – wj32

9

Diğer araçlarla ilgiliyseniz, dışa aktarılan işlevleri listeleyen bir sayı vardır. Biri Microsoft'un dumpbin. /exports seçeneğini kullanın.

şerefe & hth.,

+1

Sorgu dbgHelp Apis kullanımı hakkında. – Chubsdad

İlgili konular