dbgHelp를 사용하여 DLL (내 보낸되지 않은 메서드조차도)에 내 보낸 함수를 나열하는 방법 (C++/Windows)을 찾고 있습니다.
아무도 그것을 할 수있는 방법을 알고 있습니까?
감사합니다.내 보낸 DLL 함수 나열
6
A
답변
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
가능 중복 [DLL 내보내기 기능을 열거는 Win32 API? (http://stackoverflow.com/questions/1128150/win32-api-to-enumerate-dll-export-functions) – icecrime
디버거 아무튼 기능이 수출되는지의 여부를 신경 쓰지 마라. 코드 샘플은 다음 위치에 있습니다. http://msdn.microsoft.com/en-us/library/ms679318%28VS.85%29.aspx –
하지만 PDB가없는 경우를보고 있습니다. SymLoadModuleEx가 도움이됩니까? – Idov