dbgHelp を使用して、エクスポートされた DLL の関数 (およびエクスポートされていないメソッドも) を (C++/Windows で) リストする方法を探しています。
どの方法でそれができるか知っている人はいますか?
16697 次
2 に答える
11
他のツールに満足している場合は、エクスポートされた関数をリストする多くのツールがあります。1 つは Microsoft のです。オプションdumpbinを使用してください。/exports
于 2010-12-04T11:02:28.113 に答える
9
これを行うコードがここにあります。少しクリーンアップしたところ、以下に示すシナリオで機能し、から関数名を取得しました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;
}
于 2010-12-04T17:17:52.933 に答える