76 lines
1.8 KiB
C++
76 lines
1.8 KiB
C++
#ifndef _HOOKPROC_APIENTRY_HPP_
|
|
#define _HOOKPROC_APIENTRY_HPP_
|
|
#ifndef _COMMON_CODEGEN_HPP_
|
|
#include <common/codegen.hpp>
|
|
#endif
|
|
#ifndef _COMMON_WINDOWS_HPP_
|
|
#include <common/windows.hpp>
|
|
#endif
|
|
|
|
class APIEntry : private CodeGen
|
|
{
|
|
public:
|
|
APIEntry(DWORD stackLength,DWORD instanceAddress,DWORD hookAddress);
|
|
virtual ~APIEntry();
|
|
DWORD codeBase(void)const;
|
|
protected:
|
|
void entryPoint(DWORD entryPoint);
|
|
private:
|
|
enum {CodeLength=1024,FirstArgument=8,IATOffset=5,IATInstance=9};
|
|
APIEntry(const APIEntry &someAPIEntry);
|
|
APIEntry &operator=(const APIEntry &someAPIEntry);
|
|
void createThunk(DWORD stackLength);
|
|
void saveIATAddress(DWORD hookAddress);
|
|
void saveIATInstance(DWORD instanceAddress);
|
|
};
|
|
|
|
inline
|
|
APIEntry::APIEntry(DWORD stackLength,DWORD instanceAddress,DWORD hookAddress)
|
|
: CodeGen(CodeLength)
|
|
{
|
|
createThunk(stackLength);
|
|
saveIATAddress(hookAddress);
|
|
saveIATInstance(instanceAddress);
|
|
}
|
|
|
|
inline
|
|
APIEntry::APIEntry(const APIEntry &/*someAPIEntry*/)
|
|
{ // no implementation
|
|
}
|
|
|
|
inline
|
|
APIEntry::~APIEntry()
|
|
{
|
|
}
|
|
|
|
inline
|
|
APIEntry &APIEntry::operator=(const APIEntry &/*someAPIEntry*/)
|
|
{ // no implementation
|
|
return *this;
|
|
}
|
|
|
|
inline
|
|
DWORD APIEntry::codeBase(void)const
|
|
{
|
|
return base();
|
|
}
|
|
|
|
|
|
inline
|
|
void APIEntry::saveIATAddress(DWORD hookAddress)
|
|
{
|
|
((PureViewOfFile&)((CodeGen&)*this)).push();
|
|
((PureViewOfFile&)((CodeGen&)*this)).seek(IATOffset,PureViewOfFile::SeekSet);
|
|
((PureViewOfFile&)((CodeGen&)*this)).write((int)hookAddress);
|
|
((PureViewOfFile&)((CodeGen&)*this)).pop();
|
|
}
|
|
|
|
inline
|
|
void APIEntry::saveIATInstance(DWORD instanceAddress)
|
|
{
|
|
((PureViewOfFile&)((CodeGen&)*this)).push();
|
|
((PureViewOfFile&)((CodeGen&)*this)).seek(IATInstance,PureViewOfFile::SeekSet);
|
|
((PureViewOfFile&)((CodeGen&)*this)).write((int)instanceAddress);
|
|
((PureViewOfFile&)((CodeGen&)*this)).pop();
|
|
}
|
|
#endif |