Initial
This commit is contained in:
151
image/THNKDATA.HPP
Normal file
151
image/THNKDATA.HPP
Normal file
@@ -0,0 +1,151 @@
|
||||
#ifndef _ENGINEER_IMAGETHUNKDATA_HPP_
|
||||
#define _ENGINEER_IMAGETHUNKDATA_HPP_
|
||||
#ifndef _COMMON_WINDOWS_HPP_
|
||||
#include <common/windows.hpp>
|
||||
#endif
|
||||
#ifndef _COMMON_PUREVIEWOFFILE_HPP_
|
||||
#include <common/pview.hpp>
|
||||
#endif
|
||||
#ifndef _COMMON_STRING_HPP_
|
||||
#include <common/string.hpp>
|
||||
#endif
|
||||
|
||||
class ImageThunkData : private IMAGE_THUNK_DATA
|
||||
{
|
||||
public:
|
||||
ImageThunkData(void);
|
||||
ImageThunkData(const ImageThunkData &someImageThunkData);
|
||||
virtual ~ImageThunkData();
|
||||
ImageThunkData &operator=(const ImageThunkData &someImageThunkData);
|
||||
WORD operator==(const ImageThunkData &someImageThunkData)const;
|
||||
ImageThunkData &operator<<(PureViewOfFile &pureView);
|
||||
operator IMAGE_THUNK_DATA&(void);
|
||||
DWORD forwarderStringRVA(void)const;
|
||||
void forwarderStringRVA(DWORD forwarderStringRVA);
|
||||
DWORD functionRVA(void)const;
|
||||
void functionRVA(DWORD functionRVA);
|
||||
DWORD ordinal(void)const;
|
||||
void ordinal(DWORD ordinal);
|
||||
DWORD addressOfDataRVA(void)const;
|
||||
void addressOfDataRVA(DWORD addressOfDataRVA);
|
||||
WORD isOkay(void)const;
|
||||
WORD isOrdinalImport(void)const;
|
||||
private:
|
||||
void setZero(void);
|
||||
};
|
||||
|
||||
inline
|
||||
ImageThunkData::ImageThunkData(void)
|
||||
{
|
||||
setZero();
|
||||
}
|
||||
|
||||
inline
|
||||
ImageThunkData::ImageThunkData(const ImageThunkData &someImageThunkData)
|
||||
{
|
||||
*this=someImageThunkData;
|
||||
}
|
||||
|
||||
inline
|
||||
ImageThunkData::~ImageThunkData()
|
||||
{
|
||||
}
|
||||
|
||||
inline
|
||||
ImageThunkData::operator IMAGE_THUNK_DATA&(void)
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline
|
||||
ImageThunkData &ImageThunkData::operator=(const ImageThunkData &someImageThunkData)
|
||||
{
|
||||
forwarderStringRVA(someImageThunkData.forwarderStringRVA());
|
||||
functionRVA(someImageThunkData.functionRVA());
|
||||
ordinal(someImageThunkData.ordinal());
|
||||
addressOfDataRVA(someImageThunkData.addressOfDataRVA());
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline
|
||||
WORD ImageThunkData::operator==(const ImageThunkData &someImageThunkData)const
|
||||
{
|
||||
return (forwarderStringRVA()==someImageThunkData.forwarderStringRVA()&&
|
||||
functionRVA()==someImageThunkData.functionRVA()&&
|
||||
ordinal()==someImageThunkData.ordinal()&&
|
||||
addressOfDataRVA()==someImageThunkData.addressOfDataRVA());
|
||||
}
|
||||
|
||||
inline
|
||||
ImageThunkData &ImageThunkData::operator<<(PureViewOfFile &pureView)
|
||||
{
|
||||
pureView.read((char*)&((IMAGE_THUNK_DATA&)*this),sizeof(IMAGE_THUNK_DATA));
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageThunkData::forwarderStringRVA(void)const
|
||||
{
|
||||
return (DWORD)IMAGE_THUNK_DATA::u1.ForwarderString;
|
||||
}
|
||||
|
||||
inline
|
||||
void ImageThunkData::forwarderStringRVA(DWORD forwarderStringRVA)
|
||||
{
|
||||
IMAGE_THUNK_DATA::u1.ForwarderString=(PBYTE)forwarderStringRVA;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageThunkData::functionRVA(void)const
|
||||
{
|
||||
return (DWORD)IMAGE_THUNK_DATA::u1.Function;
|
||||
}
|
||||
|
||||
inline
|
||||
void ImageThunkData::functionRVA(DWORD functionRVA)
|
||||
{
|
||||
IMAGE_THUNK_DATA::u1.Function=(PDWORD)functionRVA;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageThunkData::ordinal(void)const
|
||||
{
|
||||
return IMAGE_ORDINAL(IMAGE_THUNK_DATA::u1.Ordinal);
|
||||
}
|
||||
|
||||
inline
|
||||
void ImageThunkData::ordinal(DWORD ordinal)
|
||||
{
|
||||
IMAGE_THUNK_DATA::u1.Ordinal=ordinal;
|
||||
}
|
||||
|
||||
inline
|
||||
DWORD ImageThunkData::addressOfDataRVA(void)const
|
||||
{
|
||||
return (DWORD)IMAGE_THUNK_DATA::u1.AddressOfData;
|
||||
}
|
||||
|
||||
inline
|
||||
void ImageThunkData::addressOfDataRVA(DWORD addressOfDataRVA)
|
||||
{
|
||||
IMAGE_THUNK_DATA::u1.AddressOfData=(PIMAGE_IMPORT_BY_NAME)addressOfDataRVA;
|
||||
}
|
||||
|
||||
inline
|
||||
void ImageThunkData::setZero(void)
|
||||
{
|
||||
::memset(&((IMAGE_THUNK_DATA&)*this),0,sizeof(IMAGE_THUNK_DATA));
|
||||
}
|
||||
|
||||
inline
|
||||
WORD ImageThunkData::isOkay(void)const
|
||||
{
|
||||
return (functionRVA()?TRUE:FALSE);
|
||||
}
|
||||
|
||||
inline
|
||||
WORD ImageThunkData::isOrdinalImport(void)const
|
||||
{
|
||||
return (IMAGE_THUNK_DATA::u1.Ordinal&IMAGE_ORDINAL_FLAG)==IMAGE_ORDINAL_FLAG;
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user