Files
Work/image/PEHDR.HPP
2024-08-07 09:16:27 -04:00

109 lines
3.0 KiB
C++

#ifndef _IMAGE_PEHEADER_HPP_
#define _IMAGE_PEHEADER_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_BLOCK_HPP_
#include <common/block.hpp>
#endif
#ifndef _IMAGE_DOSHEADER_HPP_
#include <image/doshdr.hpp>
#endif
#ifndef _IMAGE_HARDWARE_HPP_
#include <image/hardware.hpp>
#endif
#ifndef _IMAGE_IMAGEFLAGS_HPP_
#include <image/iflags.hpp>
#endif
#ifndef _IMAGE_NTSUBSYS_HPP_
#include <image/ntsubsys.hpp>
#endif
#ifndef _IMAGE_DLLFLAGS_HPP_
#include <image/dllflags.hpp>
#endif
#ifndef _IMAGE_IMAGEHEADER_HPP_
#include <image/imagehdr.hpp>
#endif
#ifndef _IMAGE_IMAGEOPTIONALHEADER_HPP_
#include <image/optlhdr.hpp>
#endif
#ifndef _IMAGE_IMAGESECTIONHEADERS_HPP_
#include <image/sctnhdrs.hpp>
#endif
#ifndef _IMAGE_IMAGEIMPORTDESCRIPTOR_HPP_
#include <image/import.hpp>
#endif
#ifndef _IMAGE_EXPORTDESCRIPTOR_HPP_
#include <image/export.hpp>
#endif
#ifndef _ENGINEER_IMAGETHUNKDATA_HPP_
#include <image/thnkdata.hpp>
#endif
#ifndef _IMAGE_IMAGETHUNKNAME_HPP_
#include <image/thnkname.hpp>
#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<ImageImportDescriptor> &imageImportDescriptors,ImageSectionHeader &importSectionHeader,PureViewOfFile &pureView,WORD memImage=FALSE);
WORD loadImageFirstThunk(Block<ImageImportDescriptor> &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<ImageDebugDirectory> &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