ApiHook.h
上传用户:kittypts
上传日期:2018-02-11
资源大小:241k
文件大小:2k
源码类别:

PlugIns编程

开发平台:

Visual C++

  1. /*
  2. *
  3. *  This file is
  4. *    Copyright (C) 2006-2008 Nektra S.A.
  5. *  
  6. *  This program is free software; you can redistribute it and/or modify
  7. *  it under the terms of the GNU Lesser General Public License as published by
  8. *  the Free Software Foundation; either version 2, or (at your option)
  9. *  any later version.
  10. *  
  11. *  This program is distributed in the hope that it will be useful,
  12. *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. *  GNU General Public License for more details.
  15. *  
  16. */
  17. #ifndef _API_HOOK_H_
  18. #define _API_HOOK_H_
  19. #include "VirtualCode.h"
  20. #include "Trampoline.h"
  21. #include "HookBase.h"
  22. #include "HookTypes.h"
  23. /**
  24. CAPIHook:
  25. Local hooking class.
  26. */
  27. class NktApiHook : public NktHookBase
  28. {
  29. public:
  30. NktApiHook(const NktFunctionWrapper& fnc, const NktLocalFunction& handler, int flags = ::_call_before);
  31. ~NktApiHook();
  32. /**
  33. Tells if a debug breakpoint (int3) was inserted in the jump code.
  34. */
  35. BOOL GetDebug() const;
  36. /**
  37. Tells if there is a call active.
  38. */
  39. BOOL GetActive() const;
  40. /**
  41. Function Address.
  42. */
  43. const void* GetFunctionAddress() const;
  44. /**
  45. Unhook hooked function:
  46. */
  47. void Unhook();
  48. protected:
  49. /**
  50. Internal: install hook code.
  51. */
  52. void Install(const NktFunctionWrapper& callee, const NktFunctionWrapper& handler);
  53. /**
  54. Internal: hook code initialization.
  55. Returns jmp size.
  56. */
  57. UCHAR InitHookCode(const void* fnc);
  58. /**
  59. From CHookBase.
  60. */
  61. virtual void RawCallFunction(NktHookCallContext*);
  62. protected:
  63. NktTrampoline _tramp; //Trampoline code.
  64. NktVirtualCode _hookCode; //Code inserted in function.
  65. NktVirtualCode _fncCode; //Updated function's code.
  66. NktVirtualCode* _oldCode; //Original Function's code.
  67. NktFunctionWrapper _fnc;
  68. };
  69. #endif // _API_HOOK_H_