You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

преди 6 години
преди 6 години
преди 6 години
преди 6 години
преди 6 години
преди 6 години
преди 6 години
преди 6 години
преди 6 години
преди 6 години
преди 6 години
преди 6 години
преди 6 години
преди 6 години
преди 6 години
преди 6 години
преди 6 години
преди 6 години
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #pragma once
  2. class AbstractHookEngine {
  3. private:
  4. const char* name_;
  5. public:
  6. static void* getSmall() { return (void*)(GetProcAddress(LoadLibrary(L"test_cases.dll"), "_small")); }
  7. static void* getBranch() { return (void*)(GetProcAddress(LoadLibrary(L"test_cases.dll"), "_branch")); }
  8. static void* getRipRelative() { return (void*)(GetProcAddress(LoadLibrary(L"test_cases.dll"), "_rip_relative")); }
  9. static void* getAVX() { return (void*)(GetProcAddress(LoadLibrary(L"test_cases.dll"), "_AVX")); }
  10. static void* getRDRAND() { return (void*)(GetProcAddress(LoadLibrary(L"test_cases.dll"), "_RDRAND")); }
  11. static void* getLoop() { return (void*)(GetProcAddress(LoadLibrary(L"test_cases.dll"), "_loop")); }
  12. static void* getTailRecursion() { return (void*)(GetProcAddress(LoadLibrary(L"test_cases.dll"), "_tail_recursion")); }
  13. public:
  14. /* boolean for each hook test case, which are set by the hooks */
  15. struct {
  16. bool small_;
  17. bool branch;
  18. bool rip_relative;
  19. bool avx;
  20. bool rdrand;
  21. bool loop;
  22. bool tail_recursion;
  23. };
  24. public:
  25. AbstractHookEngine(const char* name) :
  26. name_(name),
  27. small_(false),
  28. branch(false),
  29. rip_relative(false),
  30. avx(false),
  31. rdrand(false),
  32. loop(false),
  33. tail_recursion(false)
  34. {
  35. }
  36. virtual bool hook_all() = 0;
  37. virtual bool unhook_all() = 0;
  38. bool all_hooked() const {
  39. return small_ && branch && rip_relative && avx && rdrand && loop && tail_recursion;
  40. }
  41. const char* name() const {
  42. return name_;
  43. }
  44. friend std::ostream& operator<< (std::ostream& stream, const AbstractHookEngine& eng) {
  45. std::cout << '|' << std::setw(10) << eng.name() << std::setw(1) << '|' <<
  46. (eng.small_ ? 'X' : ' ') << '|' <<
  47. (eng.branch ? 'X' : ' ') << '|' <<
  48. (eng.rip_relative ? 'X' : ' ') << '|' <<
  49. (eng.avx ? 'X' : ' ') << '|' <<
  50. (eng.rdrand ? 'X' : ' ') << '|' <<
  51. (eng.loop ? 'X' : ' ') << '|' <<
  52. (eng.tail_recursion ? 'X' : ' ') << '|';
  53. return stream;
  54. }
  55. };