add backwards mhook tests

This commit is contained in:
2017-12-27 19:21:42 +01:00
parent 21fa828b4c
commit 605d03c0f5
4 changed files with 40 additions and 10 deletions

View File

@@ -12,6 +12,9 @@ public:
bool avx; bool avx;
bool rdrand; bool rdrand;
bool loop;
bool tail_recursion;
}; };
public: public:
AbstractHookEngine(const char* name) : name_(name) { AbstractHookEngine(const char* name) : name_(name) {

View File

@@ -12,6 +12,8 @@ static TypeBranch trueBranch = &_branch;
static TypeRip_relative trueRip_Relative = &_rip_relative; static TypeRip_relative trueRip_Relative = &_rip_relative;
static TypeAVX trueAVX = &_AVX; static TypeAVX trueAVX = &_AVX;
static TypeRDRAND trueRDRAND = &_RDRAND; static TypeRDRAND trueRDRAND = &_RDRAND;
static TypeLoop trueLoop = &_loop;
static TypeTailRecursion trueTailRecursion = &_tail_recursion;
AbstractHookEngine* g_mhook = new MHook(); AbstractHookEngine* g_mhook = new MHook();
@@ -33,25 +35,40 @@ uint64_t MHook_Hooks::hookRip_relative(void) {
return trueRip_Relative(); return trueRip_Relative();
} }
void MHook_Hooks::_AVX(float num, void* res) { void MHook_Hooks::hookAVX(float num, void* res) {
g_mhook->avx = true; g_mhook->avx = true;
return trueAVX(num, res); return trueAVX(num, res);
} }
uint32_t MHook_Hooks::_RDRAND(void) { uint32_t MHook_Hooks::hookRDRAND(void) {
g_mhook->rdrand = true; g_mhook->rdrand = true;
return trueRDRAND(); return trueRDRAND();
} }
uint32_t MHook_Hooks::hookLoop(uint32_t num, uint32_t cnt) {
g_mhook->loop = true;
return trueLoop(num, cnt);
}
uint32_t MHook_Hooks::hookTail_recursion(uint32_t x) {
g_mhook->tail_recursion = true;
return trueTailRecursion(x);
}
bool MHook::hook_all(void) { bool MHook::hook_all(void) {
bool ret = Mhook_SetHook((PVOID*)&trueSmall, &MHook_Hooks::hookSmall); bool ret = Mhook_SetHook((PVOID*)&trueSmall, &MHook_Hooks::hookSmall);
ret |= Mhook_SetHook((PVOID*)&trueBranch, &MHook_Hooks::hookBranch); ret |= Mhook_SetHook((PVOID*)&trueBranch, &MHook_Hooks::hookBranch);
ret |= Mhook_SetHook((PVOID*)&trueRip_Relative, &MHook_Hooks::hookRip_relative); ret |= Mhook_SetHook((PVOID*)&trueRip_Relative, &MHook_Hooks::hookRip_relative);
ret |= Mhook_SetHook((PVOID*)&trueAVX, &MHook_Hooks::_AVX); ret |= Mhook_SetHook((PVOID*)&trueAVX, &MHook_Hooks::hookAVX);
ret |= Mhook_SetHook((PVOID*)&trueRDRAND, &MHook_Hooks::_RDRAND); ret |= Mhook_SetHook((PVOID*)&trueRDRAND, &MHook_Hooks::hookRDRAND);
ret |= Mhook_SetHook((PVOID*)&trueLoop, &MHook_Hooks::hookLoop);
ret |= Mhook_SetHook((PVOID*)&trueTailRecursion, &MHook_Hooks::hookTail_recursion);
return ret; return ret;
} }
@@ -60,5 +77,7 @@ bool MHook::unhook_all() {
return Mhook_Unhook((PVOID*)&trueSmall) && return Mhook_Unhook((PVOID*)&trueSmall) &&
Mhook_Unhook((PVOID*)&trueBranch) && Mhook_Unhook((PVOID*)&trueBranch) &&
Mhook_Unhook((PVOID*)&trueAVX) && Mhook_Unhook((PVOID*)&trueAVX) &&
Mhook_Unhook((PVOID*)&trueRDRAND); Mhook_Unhook((PVOID*)&trueRDRAND) &&
Mhook_Unhook((PVOID*)&trueLoop) &&
Mhook_Unhook((PVOID*)&trueTailRecursion);
} }

View File

@@ -4,8 +4,10 @@ namespace MHook_Hooks {
uint64_t hookSmall(void); uint64_t hookSmall(void);
uint64_t hookBranch(uint64_t); uint64_t hookBranch(uint64_t);
uint64_t hookRip_relative(void); uint64_t hookRip_relative(void);
void _AVX(float num, void* res); void hookAVX(float num, void* res);
uint32_t _RDRAND(void); uint32_t hookRDRAND(void);
uint32_t hookLoop(uint32_t num, uint32_t cnt);
uint32_t hookTail_recursion(uint32_t x);
}; };
class MHook : public AbstractHookEngine { class MHook : public AbstractHookEngine {
@@ -21,6 +23,8 @@ public:
friend uint64_t MHook_Hooks::hookBranch(uint64_t); friend uint64_t MHook_Hooks::hookBranch(uint64_t);
friend uint64_t MHook_Hooks::hookRip_relative(void); friend uint64_t MHook_Hooks::hookRip_relative(void);
friend void MHook_Hooks::_AVX(float num, void* res); friend void MHook_Hooks::hookAVX(float num, void* res);
friend uint32_t MHook_Hooks::_RDRAND(void); friend uint32_t MHook_Hooks::hookRDRAND(void);
friend uint32_t MHook_Hooks::hookLoop(uint32_t num, uint32_t cnt);
friend uint32_t MHook_Hooks::hookTail_recursion(uint32_t x);
}; };

View File

@@ -10,3 +10,7 @@ typedef uint64_t (*TypeRip_relative)(void);
typedef void (*TypeAVX)(float num, void* res); typedef void (*TypeAVX)(float num, void* res);
typedef uint32_t (*TypeRDRAND)(void); typedef uint32_t (*TypeRDRAND)(void);
typedef uint32_t (*TypeLoop)(uint32_t num, uint32_t cnt);
typedef uint32_t (*TypeTailRecursion)(uint32_t x);