2010-12-04 2 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

디버거 아무튼 기능이 수출되는지의 여부를 신경 쓰지 마라. 코드 샘플은 다음 위치에 있습니다. 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

다른 도구에 만족하면 내 보낸 기능을 나열하는 번호가 있습니다. 하나는 Microsoft의 dumpbin입니다. /exports 옵션을 사용하십시오.

환호 & HTH.,

+1

이 쿼리는 dbgHelp Apis를 사용하는 것에 관한 것입니다. – Chubsdad