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;
}
Пример #2
0
    void parse() {
        parseElfHeader();
        parseSections();
        parseSymbols();
        parseRelocations();

        foreach (auto &section, sections_) {
            image_->addSection(std::move(section));
        }