Список функций из DLL AddressOfNames

Пришло время научиться получать список экпортируемых функций из 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();
 
« Предыдущая статья   Следующая статья »