Пришло время научиться получать список экпортируемых функций из DLL. Учтите, что мы с Вами экпортируем все функции даже не документированные.
В структуре IMAGE_DIRECTORY_ENTRY_EXPORT есть ссылки на три массива. Один из этих массивов ссылается на данные с именами функций:
typedef struct _IMAGE_EXPORT_DIRECTORY
{
......
DWORD AddressOfFunctions;
DWORD AddressOfNames;// массив указателей на имена функций
DWORD AddressOfNameOrdinals;
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
Итак, сейчас давайте создадим программу, которая будет выводить в файл список всех функций из модуля user32.dll. Сначала создадим ссылку на библиотеку работы с потоками:
// TestAPI.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "fstream.h"
.......
А теперь новый код:
......
PIMAGE_EXPORT_DIRECTORY pImportDesc=NULL;
pImportDesc = MakePtr(PIMAGE_EXPORT_DIRECTORY,hUser32,
pPEHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
PCSTR *l_ppszName = MakePtr(PCSTR*,pImportDesc->AddressOfNames, hUser32);
DWORD x=pImportDesc->NumberOfNames;
ofstream ofs("rez.txt");
for (DWORD i=0;i<x;i++)
{
char *p=MakePtr(char*,*l_ppszName,hUser32);
ofs << p << endl;
l_ppszName++;
}
ofs.close();