polyhook
This commit is contained in:
87
tester/polyhook.cpp
Normal file
87
tester/polyhook.cpp
Normal file
@@ -0,0 +1,87 @@
|
||||
#include <Windows.h>
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
#include "..\third_party\poly\PolyHook\PolyHook.hpp"
|
||||
#include "typedefs.h"
|
||||
#include "abstracthook.h"
|
||||
#include "PolyHook.h"
|
||||
|
||||
#pragma comment(lib, "..\\x64\\debug\\test_cases.lib")
|
||||
|
||||
static TypeSmall trueSmall = &_small;
|
||||
static TypeBranch trueBranch = &_branch;
|
||||
static TypeRip_relative trueRip_Relative = &_rip_relative;
|
||||
static TypeAVX trueAVX = &_AVX;
|
||||
static TypeRDRAND trueRDRAND = &_RDRAND;
|
||||
static TypeLoop trueLoop = &_loop;
|
||||
static TypeTailRecursion trueTailRecursion = &_tail_recursion;
|
||||
|
||||
AbstractHookEngine* g_PolyHook = new PolyHook();
|
||||
|
||||
uint64_t PolyHook_Hooks::hookSmall(void) {
|
||||
g_PolyHook->small_ = true;
|
||||
|
||||
return trueSmall();
|
||||
}
|
||||
|
||||
uint64_t PolyHook_Hooks::hookBranch(uint64_t x) {
|
||||
g_PolyHook->branch = true;
|
||||
|
||||
return trueBranch(x);
|
||||
}
|
||||
|
||||
uint64_t PolyHook_Hooks::hookRip_relative(void) {
|
||||
g_PolyHook->rip_relative = true;
|
||||
|
||||
return trueRip_Relative();
|
||||
}
|
||||
|
||||
void PolyHook_Hooks::hookAVX(float num, void* res) {
|
||||
g_PolyHook->avx = true;
|
||||
|
||||
return trueAVX(num, res);
|
||||
}
|
||||
|
||||
uint32_t PolyHook_Hooks::hookRDRAND(void) {
|
||||
g_PolyHook->rdrand = true;
|
||||
|
||||
return trueRDRAND();
|
||||
}
|
||||
|
||||
uint32_t PolyHook_Hooks::hookLoop(uint32_t num, uint32_t cnt) {
|
||||
g_PolyHook->loop = true;
|
||||
|
||||
return trueLoop(num, cnt);
|
||||
}
|
||||
|
||||
uint32_t PolyHook_Hooks::hookTail_recursion(uint32_t x) {
|
||||
g_PolyHook->tail_recursion = true;
|
||||
|
||||
return trueTailRecursion(x);
|
||||
}
|
||||
|
||||
bool PolyHook::hook_all(void) {
|
||||
bool ret = hook<decltype(&_small)>(detSmall, &_small, (void*&)trueSmall, &PolyHook_Hooks::hookSmall);
|
||||
ret |= hook<decltype(&_branch)>(detBranch, &_branch, (void*&)trueBranch, &PolyHook_Hooks::hookBranch);
|
||||
ret |= hook<decltype(&rip_relative)>(detRIPRelative, &rip_relative, (void*&)trueRip_Relative, &PolyHook_Hooks::hookRip_relative);
|
||||
|
||||
ret |= hook<decltype(&_AVX)>(detAVX, &_AVX, (void*&)trueAVX, &PolyHook_Hooks::hookAVX);
|
||||
ret |= hook<decltype(&_RDRAND)>(detRDRAND, &_RDRAND, (void*&)trueRDRAND, &PolyHook_Hooks::hookRDRAND);
|
||||
|
||||
ret |= hook<decltype(&_loop)>(detLoop, &_loop, (void*&)trueLoop, &PolyHook_Hooks::hookLoop);
|
||||
ret |= hook<decltype(&_tail_recursion)>(detTailRecursion, &_tail_recursion, (void*&)trueTailRecursion, &PolyHook_Hooks::hookTail_recursion);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool PolyHook::unhook_all() {
|
||||
detSmall->UnHook();
|
||||
detBranch->UnHook();
|
||||
detRIPRelative->UnHook();
|
||||
detAVX->UnHook();
|
||||
detRDRAND->UnHook();
|
||||
detLoop->UnHook();
|
||||
detTailRecursion->UnHook();
|
||||
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user