Вывод списка экспортируемых функций DLL - PullRequest
6 голосов
/ 04 декабря 2010


Я ищу способ (в C ++ / Windows) перечислить экспортируемые функции в DLL (и, возможно, даже методы, которые не экспортируются), используя dbgHelp.
Кто-нибудь знает, какой метод может сделатьэто?
спасибо:)

Ответы [ 2 ]

10 голосов
/ 04 декабря 2010

, если вы довольны другими инструментами, существует ряд, которые перечисляют экспортируемые функции.один из них - dumpbin от Microsoft.используйте опцию /exports.

ура и hth.,

7 голосов
/ 04 декабря 2010

Для этого есть код здесь .Я немного очистил его, и он работал в сценарии, показанном ниже, получая имена функций из 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;   
}
...