I'm trying to parse a PE file, I could extract some info, but not PIMAGE_EXPORT_DIRECTORY
. What am I doing wrong? I'm trying to get both offset and value.
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;
}
Edit: Oh and there is an export function in the DLL I am testing with: