#ifndef _IMAGE_PEHEADER_HPP_ #define _IMAGE_PEHEADER_HPP_ #ifndef _COMMON_WINDOWS_HPP_ #include #endif #ifndef _COMMON_BLOCK_HPP_ #include #endif #ifndef _IMAGE_DOSHEADER_HPP_ #include #endif #ifndef _IMAGE_HARDWARE_HPP_ #include #endif #ifndef _IMAGE_IMAGEFLAGS_HPP_ #include #endif #ifndef _IMAGE_NTSUBSYS_HPP_ #include #endif #ifndef _IMAGE_DLLFLAGS_HPP_ #include #endif #ifndef _IMAGE_IMAGEHEADER_HPP_ #include #endif #ifndef _IMAGE_IMAGEOPTIONALHEADER_HPP_ #include #endif #ifndef _IMAGE_IMAGESECTIONHEADERS_HPP_ #include #endif #ifndef _IMAGE_IMAGEIMPORTDESCRIPTOR_HPP_ #include #endif #ifndef _IMAGE_EXPORTDESCRIPTOR_HPP_ #include #endif #ifndef _ENGINEER_IMAGETHUNKDATA_HPP_ #include #endif #ifndef _IMAGE_IMAGETHUNKNAME_HPP_ #include #endif class ImageDebugDirectory; class PureViewOfFile; class PEHeader : public DOSHeader, public ImageHeader, public ImageOptionalHeader, public ImageSectionHeaders { public: enum {PESignature=0x4550}; PEHeader(void); PEHeader(const PEHeader &somePEHeader); ~PEHeader(); PEHeader &operator=(const PEHeader &somePEHeader); WORD operator==(const PEHeader &somePEHeader); WORD operator<<(PureViewOfFile &pureView); WORD loadImageImportDescriptors(Block &imageImportDescriptors,ImageSectionHeader &importSectionHeader,PureViewOfFile &pureView,WORD memImage=FALSE); WORD loadImageFirstThunk(Block &imageImportDescriptors,ImageSectionHeader &importSectionHeader,PureViewOfFile &pureView,WORD memImage=FALSE); WORD loadImageExportDescriptors(ImageExportDescriptors &imageExportDescriptors,ImageSectionHeader &importSectionHeader,PureViewOfFile &pureView,WORD sortFlag=TRUE,WORD memImage=FALSE); WORD loadImageDebugDirectory(Block &imageDebugDirectories,PureViewOfFile &pureView,WORD memImage=FALSE); WORD isOkay(void)const; private: WORD loadImageExportDescriptors(ImageExportDescriptors &imageExportDescriptors,ImageSectionHeader &exportSectionHeader,const String &moduleName); DWORD mPESignature; ImageExportDescriptors mImageExportDescriptorsCache; }; inline PEHeader::PEHeader(void) : mPESignature(0) { } inline PEHeader::PEHeader(const PEHeader &somePEHeader) { *this=somePEHeader; } inline PEHeader::~PEHeader() { } inline PEHeader &PEHeader::operator=(const PEHeader &somePEHeader) { (DOSHeader&)*this=(DOSHeader&)somePEHeader; (ImageHeader&)*this=(ImageHeader&)somePEHeader; mImageExportDescriptorsCache=somePEHeader.mImageExportDescriptorsCache; return *this; } inline WORD PEHeader::operator==(const PEHeader &somePEHeader) { return ((DOSHeader&)*this==(DOSHeader&)somePEHeader&& (ImageHeader&)*this==(ImageHeader&)somePEHeader); } inline WORD PEHeader::isOkay(void)const { return PESignature==mPESignature; } #endif