Initial
This commit is contained in:
284
image/OPTLHDR.HPP
Normal file
284
image/OPTLHDR.HPP
Normal file
@@ -0,0 +1,284 @@
|
||||
#ifndef _IMAGE_IMAGEOPTIONALHEADER_HPP_
|
||||
#define _IMAGE_IMAGEOPTIONALHEADER_HPP_
|
||||
#ifndef _IMAGE_IMAGEDATADIRECTORY_HPP_
|
||||
#include <image/imagedir.hpp>
|
||||
#endif
|
||||
#ifndef _IMAGE_DIRECTORYENTRYKEY_HPP_
|
||||
#include <image/keydir.hpp>
|
||||
#endif
|
||||
#ifndef _IMAGE_NTSUBSYS_HPP_
|
||||
#include <image/ntsubsys.hpp>
|
||||
#endif
|
||||
#ifndef _COMMON_ASSERT_HPP_
|
||||
#include <common/assert.hpp>
|
||||
#endif
|
||||
|
||||
class ImageOptionalHeader : private _IMAGE_OPTIONAL_HEADER
|
||||
{
|
||||
public:
|
||||
enum{NTMagic=0x010B,ROMMagic=0x0107};
|
||||
ImageOptionalHeader(void);
|
||||
ImageOptionalHeader(const ImageOptionalHeader &someImageOptionalHeader);
|
||||
~ImageOptionalHeader();
|
||||
ImageOptionalHeader &operator=(const ImageOptionalHeader &someImageOptionalHeader);
|
||||
WORD operator==(const ImageOptionalHeader &someImageOptionalHeader);
|
||||
WORD operator<<(PureViewOfFile &pureView);
|
||||
ImageDataDirectory operator[](DirectoryEntryKey entryKey);
|
||||
WORD magic(void)const;
|
||||
BYTE majorLinkerVersion(void)const;
|
||||
BYTE minorLinkerVersion(void)const;
|
||||
DWORD sizeofCode(void)const;
|
||||
DWORD sizeofInitializedData(void)const;
|
||||
DWORD sizeofUninitializedData(void)const;
|
||||
DWORD entryPointAddress(void)const;
|
||||
DWORD codeBase(void)const;
|
||||
DWORD dataBase(void)const;
|
||||
DWORD imageBase(void)const;
|
||||
DWORD sectionAlignment(void)const;
|
||||
DWORD fileAlignment(void)const;
|
||||
WORD majorOSVersion(void)const;
|
||||
WORD minorOSVersion(void)const;
|
||||
WORD majorImageVersion(void)const;
|
||||
WORD minorImageVersion(void)const;
|
||||
WORD majorSubsystemVersion(void)const;
|
||||
WORD minorSubsystemVersion(void)const;
|
||||
DWORD sizeofImage(void)const;
|
||||
DWORD sizeofHeaders(void)const;
|
||||
DWORD checksum(void)const;
|
||||
NTSubSystem subsystem(void)const;
|
||||
WORD dllCharacteristics(void)const;
|
||||
DWORD sizeofStackReserve(void)const;
|
||||
DWORD sizeofStackCommit(void)const;
|
||||
DWORD sizeofHeapReserve(void)const;
|
||||
DWORD sizeofHeapCommit(void)const;
|
||||
DWORD loaderFlags(void)const;
|
||||
DWORD numberOfRvaAndSizes(void)const;
|
||||
WORD isOkay(void)const;
|
||||
private:
|
||||
enum{NumberOfDirectoryEntries=IMAGE_NUMBEROF_DIRECTORY_ENTRIES};
|
||||
};
|
||||
|
||||
inline
|
||||
ImageOptionalHeader::ImageOptionalHeader(void)
|
||||
{
|
||||
::memset((char*)&((_IMAGE_OPTIONAL_HEADER&)*this),0,sizeof(_IMAGE_OPTIONAL_HEADER));
|
||||
}
|
||||
|
||||
inline
|
||||
ImageOptionalHeader::ImageOptionalHeader(const ImageOptionalHeader &someImageOptionalHeader)
|
||||
{
|
||||
*this=someImageOptionalHeader;
|
||||
}
|
||||
|
||||
inline
|
||||
ImageOptionalHeader::~ImageOptionalHeader()
|
||||
{
|
||||
}
|
||||
|
||||
inline
|
||||
ImageOptionalHeader &ImageOptionalHeader::operator=(const ImageOptionalHeader &someImageOptionalHeader)
|
||||
{
|
||||
::memcpy((char*)&((_IMAGE_OPTIONAL_HEADER&)*this),(char*)&((_IMAGE_OPTIONAL_HEADER&)someImageOptionalHeader),sizeof(_IMAGE_OPTIONAL_HEADER));
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline
|
||||
WORD ImageOptionalHeader::operator==(const ImageOptionalHeader &someImageOptionalHeader)
|
||||
{
|
||||
return ::memcmp((char*)&((_IMAGE_OPTIONAL_HEADER&)*this),(char*)&((_IMAGE_OPTIONAL_HEADER&)someImageOptionalHeader),sizeof(_IMAGE_OPTIONAL_HEADER));
|
||||
}
|
||||
|
||||
inline
|
||||
WORD ImageOptionalHeader::operator<<(PureViewOfFile &pureView)
|
||||
{
|
||||
if(sizeof(_IMAGE_OPTIONAL_HEADER)!=pureView.read((char*)&((_IMAGE_OPTIONAL_HEADER&)*this),sizeof(_IMAGE_OPTIONAL_HEADER)))return FALSE;
|
||||
return isOkay();
|
||||
}
|
||||
|
||||
inline
|
||||
ImageDataDirectory ImageOptionalHeader::operator[](DirectoryEntryKey entryKey)
|
||||
{
|
||||
assert(entryKey.entryKey()<numberOfRvaAndSizes());
|
||||
return ImageDataDirectory(_IMAGE_OPTIONAL_HEADER::DataDirectory[entryKey.entryKey()]);
|
||||
}
|
||||
|
||||
inline
|
||||
WORD ImageOptionalHeader::magic(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::Magic;
|
||||
}
|
||||
|
||||
inline
|
||||
BYTE ImageOptionalHeader::majorLinkerVersion(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::MajorLinkerVersion;
|
||||
}
|
||||
|
||||
inline
|
||||
BYTE ImageOptionalHeader::minorLinkerVersion(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::MinorLinkerVersion;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageOptionalHeader::sizeofCode(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::SizeOfCode;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageOptionalHeader::sizeofInitializedData(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::SizeOfInitializedData;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageOptionalHeader::sizeofUninitializedData(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::SizeOfUninitializedData;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageOptionalHeader::entryPointAddress(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::AddressOfEntryPoint;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageOptionalHeader::codeBase(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::BaseOfCode;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageOptionalHeader::dataBase(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::BaseOfData;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageOptionalHeader::imageBase(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::ImageBase;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageOptionalHeader::sectionAlignment(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::SectionAlignment;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageOptionalHeader::fileAlignment(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::FileAlignment;
|
||||
}
|
||||
|
||||
inline
|
||||
WORD ImageOptionalHeader::majorOSVersion(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::MajorOperatingSystemVersion;
|
||||
}
|
||||
|
||||
inline
|
||||
WORD ImageOptionalHeader::minorOSVersion(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::MinorOperatingSystemVersion;
|
||||
}
|
||||
|
||||
inline
|
||||
WORD ImageOptionalHeader::majorImageVersion(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::MajorImageVersion;
|
||||
}
|
||||
|
||||
inline
|
||||
WORD ImageOptionalHeader::minorImageVersion(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::MinorImageVersion;
|
||||
}
|
||||
|
||||
inline
|
||||
WORD ImageOptionalHeader::majorSubsystemVersion(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::MajorSubsystemVersion;
|
||||
}
|
||||
|
||||
inline
|
||||
WORD ImageOptionalHeader::minorSubsystemVersion(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::MinorSubsystemVersion;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageOptionalHeader::sizeofImage(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::SizeOfImage;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageOptionalHeader::sizeofHeaders(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::SizeOfHeaders;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageOptionalHeader::checksum(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::CheckSum;
|
||||
}
|
||||
|
||||
inline
|
||||
NTSubSystem ImageOptionalHeader::subsystem(void)const
|
||||
{
|
||||
return NTSubSystem(_IMAGE_OPTIONAL_HEADER::Subsystem);
|
||||
}
|
||||
|
||||
inline
|
||||
WORD ImageOptionalHeader::dllCharacteristics(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::DllCharacteristics;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageOptionalHeader::sizeofStackReserve(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::SizeOfStackReserve;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageOptionalHeader::sizeofStackCommit(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::SizeOfStackCommit;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageOptionalHeader::sizeofHeapReserve(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::SizeOfHeapReserve;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageOptionalHeader::sizeofHeapCommit(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::SizeOfHeapCommit;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageOptionalHeader::loaderFlags(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::LoaderFlags;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageOptionalHeader::numberOfRvaAndSizes(void)const
|
||||
{
|
||||
return _IMAGE_OPTIONAL_HEADER::NumberOfRvaAndSizes;
|
||||
}
|
||||
|
||||
inline
|
||||
WORD ImageOptionalHeader::isOkay(void)const
|
||||
{
|
||||
return (NTMagic==magic()||ROMMagic==magic());
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user