109 lines
3.0 KiB
C++
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
|