2010-12-04 15 views
6


私は、dbgHelpを使用してDLL(エクスポートされていないメソッドさえも)にエクスポートされた関数をリストする方法を(C++/Windowsでは)探しています。
誰でもどの方法でそれを行うことができるのか分かりませんか?
ありがとう)エクスポートされたDLLの関数をリストする

+1

の可能重複[DLLエクスポート機能を列挙するためのWin32 API?](http://stackoverflow.com/questions/1128150/win32-api-to-enumerate-dll-export-functions) – icecrime

+0

デバッガのdoesn関数がエクスポートされるかどうかは気にしない。コードサンプルはhttp://msdn.microsoft.com/en-us/library/ms679318%28VS.85%29.aspx –

+0

ですが、私はPDBを持っていないケースを見ています。 SymLoadModuleExは私を助けますか? – Idov

答えて

6

これを実行するためのコードhereがあります。私はそれを少しきれいにして、以下のシナリオで機能名を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

OPは、エクスポートされていないシンボルを含むdbghelpベースのソリューションを求めています... – wj32

9

他のツールのコンテンツには、エクスポートされた機能を一覧表示する番号があります。 1つはMicrosoftのdumpbinです。 /exportsオプションを使用してください。

歓声& HTH。、

+1

このクエリはdbgHelp Apisを使用しています。 – Chubsdad

関連する問題