Listing the exported functions of a DLL

后端 未结 2 1672
清歌不尽
清歌不尽 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: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& 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 names;
        ListDLLFunctions("KERNEL32.DLL", names);
    
        return 0;   
    }
    

提交回复
热议问题