#include #include #include #include #include #include #include WORD PEHeader::operator<<(PureViewOfFile &pureView) { pureView.rewind(); if(!((DOSHeader&)*this<&)*this)[itemIndex]< &imageImportDescriptors,ImageSectionHeader &importSectionHeader,PureViewOfFile &pureView,WORD memImage) { DirectoryEntryKey sectionKey(DirectoryEntryKey::ImportDirectory); ImageDataDirectory imageSectionDirectory(((ImageOptionalHeader&)*this)[sectionKey]); ImageImportDescriptor imageImportDescriptor; ImageSectionHeader importNamesSectionHeader; DWORD deltaOffset; DWORD deltaNames; imageImportDescriptors.remove(); isMemImage(memImage); if(!enclosingSectionHeader(imageSectionDirectory.virtualAddress(),importSectionHeader,deltaOffset))return FALSE; pureView.seek(imageSectionDirectory.virtualAddress()-deltaOffset,PureViewOfFile::SeekSet); while(TRUE) { String moduleName; imageImportDescriptor< &imageImportDescriptors,ImageSectionHeader &importSectionHeader,PureViewOfFile &pureView,WORD memImage) { DirectoryEntryKey sectionKey(DirectoryEntryKey::ImportDirectory); ImageDataDirectory imageSectionDirectory(((ImageOptionalHeader&)*this)[sectionKey]); ImageImportDescriptor imageImportDescriptor; ImageSectionHeader importNamesSectionHeader; DWORD deltaOffset; DWORD deltaNames; imageImportDescriptors.remove(); isMemImage(memImage); if(!enclosingSectionHeader(imageSectionDirectory.virtualAddress(),importSectionHeader,deltaOffset))return FALSE; pureView.seek(imageSectionDirectory.virtualAddress()-deltaOffset,PureViewOfFile::SeekSet); while(TRUE) { String moduleName; imageImportDescriptor< &imageDebugDirectories,PureViewOfFile &pureView,WORD memImage) { DirectoryEntryKey sectionKey(DirectoryEntryKey::DebugDirectory); ImageDataDirectory imageSectionDirectory(((ImageOptionalHeader&)*this)[sectionKey]); ImageSectionHeader exportSectionHeader; DWORD imageDirectoryEntries; DWORD deltaOffset; WORD msImage(FALSE); imageDebugDirectories.remove(); isMemImage(memImage); if(!enclosingSectionHeader(imageSectionDirectory.virtualAddress(),exportSectionHeader,deltaOffset))return FALSE; for(short sectionIndex=0;sectionIndex&)*this)[sectionIndex].name()==String(".text"))msImage=TRUE; imageDirectoryEntries=imageSectionDirectory.size(); if(msImage)imageDirectoryEntries/=sizeof(IMAGE_DEBUG_DIRECTORY); pureView.push(); pureView.seek(imageSectionDirectory.virtualAddress()-deltaOffset,PureViewOfFile::SeekSet); for(long entryIndex=0;entryIndex