152 lines
3.4 KiB
C++
152 lines
3.4 KiB
C++
#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
|