Listing the exported functions of a DLL

后端 未结 2 1663
清歌不尽
清歌不尽 2020-12-08 18:05

I\'m looking for a way (in C++/Windows) to list the exported functions of a DLL (and maybe even methods which are not exported) using dbgHelp.
Does anybody know which me

相关标签:
2条回答
  • 2020-12-08 18:38

    If you're content with other tools then there are a number that do list exported functions. One is Microsoft's dumpbin, use the /exports option.

    0 讨论(0)
  • 2020-12-08 18:43

    There is code here to do this. I have cleaned it up a bit and it worked in the scenario shown below, retrieving function names from 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 讨论(0)
提交回复
热议问题