bool MappedPeFile::map(DWORD extensionSize) { if (!MappedFile::map(extensionSize)) { return false; } m_pDOS = (PIMAGE_DOS_HEADER)m_fileBuf; if (m_pDOS->e_magic != IMAGE_DOS_SIGNATURE) { printf("invalid DOS signature\n"); return false; } m_pNT = (PIMAGE_NT_HEADERS)(m_fileBuf + m_pDOS->e_lfanew); if (m_pNT->Signature != IMAGE_NT_SIGNATURE) { printf("invalid PE signature\n"); return false; } m_pSectionTable = (PIMAGE_SECTION_HEADER)((DWORD)&m_pNT->OptionalHeader + m_pNT->FileHeader.SizeOfOptionalHeader); m_pImportDataDirectory = &m_pNT->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]; parseRelocations(); return true; }
void parse() { parseElfHeader(); parseSections(); parseSymbols(); parseRelocations(); foreach (auto §ion, sections_) { image_->addSection(std::move(section)); }