Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

před 6 roky
před 6 roky
před 6 roky
před 6 roky
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #pragma once
  2. namespace PolyHook_Hooks {
  3. uint64_t hookSmall(void);
  4. uint64_t hookBranch(uint64_t);
  5. uint64_t hookRip_relative(void);
  6. void hookAVX(float num, void* res);
  7. uint32_t hookRDRAND(void);
  8. uint32_t hookLoop(uint32_t x);
  9. uint32_t hookTail_recursion(uint32_t x);
  10. };
  11. class PolyHook : public AbstractHookEngine {
  12. private:
  13. std::shared_ptr<PLH::Detour> detSmall,
  14. detBranch,
  15. detRIPRelative,
  16. detAVX,
  17. detRDRAND,
  18. detLoop,
  19. detTailRecursion;
  20. template <typename T>
  21. bool hook(std::shared_ptr<PLH::Detour> det, void* func, T& original, void* hook) {
  22. det->SetupHook((BYTE*)func, (BYTE*)hook);
  23. if (!det->Hook()) {
  24. return false;
  25. }
  26. return (original = det->GetOriginal<T>());
  27. }
  28. public:
  29. bool hook_all();
  30. bool unhook_all();
  31. PolyHook() : AbstractHookEngine("PolyHook"),
  32. detSmall(new PLH::Detour),
  33. detRIPRelative(new PLH::Detour),
  34. detBranch(new PLH::Detour),
  35. detAVX(new PLH::Detour),
  36. detRDRAND(new PLH::Detour),
  37. detLoop(new PLH::Detour),
  38. detTailRecursion(new PLH::Detour)
  39. {
  40. assert(detSmall->GetType() == PLH::HookType::Detour);
  41. assert(detBranch->GetType() == PLH::HookType::Detour);
  42. assert(detRIPRelative->GetType() == PLH::HookType::Detour);
  43. assert(detAVX->GetType() == PLH::HookType::Detour);
  44. assert(detRDRAND->GetType() == PLH::HookType::Detour);
  45. assert(detLoop->GetType() == PLH::HookType::Detour);
  46. assert(detTailRecursion->GetType() == PLH::HookType::Detour);
  47. }
  48. friend uint64_t PolyHook_Hooks::hookSmall(void);
  49. friend uint64_t PolyHook_Hooks::hookBranch(uint64_t);
  50. friend uint64_t PolyHook_Hooks::hookRip_relative(void);
  51. friend void PolyHook_Hooks::hookAVX(float num, void* res);
  52. friend uint32_t PolyHook_Hooks::hookRDRAND(void);
  53. friend uint32_t PolyHook_Hooks::hookLoop(uint32_t num);
  54. friend uint32_t PolyHook_Hooks::hookTail_recursion(uint32_t x);
  55. };