【问题标题】:Listing the exported functions of a DLL列出 DLL 的导出函数
【发布时间】:2010-12-04 10:39:59
【问题描述】:

我正在寻找一种方法(在 C++/Windows 中)使用 dbgHelp 列出 DLL 的导出函数(甚至可能是未导出的方法)。
有人知道哪种方法可以做到吗?

【问题讨论】:

标签: c++ windows dll export dbghelp


【解决方案1】:

如果您对其他工具感到满意,那么有一些工具会列出导出的函数。一种是微软的dumpbin,使用/exports选项。

【讨论】:

  • 查询是关于使用 dbgHelp APIs。
【解决方案2】:

有代码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;   
}

【讨论】:

  • OP 要求基于 dbghelp 的解决方案,其中包括非导出符号...
猜你喜欢
  • 2011-02-22
  • 2021-11-17
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
  • 2012-09-06
  • 2021-09-17
  • 2012-12-26
相关资源
最近更新 更多