Я пытаюсь разобрать PE-файл, я могу извлечь некоторую информацию, но не PIMAGE_EXPORT_DIRECTORY
. Что я делаю не так? Я пытаюсь получить как смещение, так и значение.
bool InfoPE(const char* dllFile)
{
IMAGE_NT_HEADERS* pNtHeaders;
IMAGE_OPTIONAL_HEADER* pOptionalHeader;
IMAGE_FILE_HEADER* pFileHeader;
BYTE* pTargetBase;
std::ifstream File(dllFile, std::ios::binary | std::ios::ate);
auto FileSize = File.tellg();
std::allocator<BYTE> alloc;
BYTE* pSrcData = alloc.allocate(static_cast<UINT_PTR>(FileSize));
File.seekg(0, std::ios::beg);
File.read(reinterpret_cast<char*>(pSrcData), FileSize);
File.close();
pNtHeaders = reinterpret_cast<IMAGE_NT_HEADERS*>(pSrcData + reinterpret_cast<IMAGE_DOS_HEADER*>(pSrcData)->e_lfanew);
pOptionalHeader = &pNtHeaders->OptionalHeader;
pFileHeader = &pNtHeaders->FileHeader;
IMAGE_DATA_DIRECTORY* dataDirectory;
dataDirectory = pOptionalHeader->DataDirectory;
DWORD exportDirRVA = dataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress;
DWORD exportDirSize = dataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size;
// Trying to get offsets and values, but it fails here
auto pimage_export_directory = reinterpret_cast<PIMAGE_EXPORT_DIRECTORY>(pSrcData + exportDirRVA);
return true;
}
Изменить: О, и есть функция экспорта в DLL, которую я тестирую с: