VTHook.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 _VTHOOK_H_
  18. #define _VTHOOK_H_
  19. #include "HookBase.h"
  20. #include "types.h"
  21. #include <map>
  22. /**
  23. Hooks a Virtual Table.
  24. */
  25. class NktVtHook : public NktHookBase
  26. {
  27. public:
  28. typedef struct EntryData;
  29. typedef std::map<SIZE_T, EntryData*> Entries;
  30. public:
  31. NktVtHook(const DV_PTR vt, int cc = thiscall_com_);
  32. ~NktVtHook();
  33. /**
  34. Get current function address in VT.
  35. */
  36. DV_PTR GetAddress(SIZE_T index);
  37. /**
  38. Get Original function address in VT.
  39. */
  40. DV_PTR GetOriginalAddress(SIZE_T index);
  41. /**
  42. Hook a VT Entry.
  43. @index entry to install into.
  44. */
  45. void HookEntry(SIZE_T index, USHORT pmsSize = 0);
  46. /**
  47. Unhook and restore VT entry with original value. Entry must have been hooked.
  48. @index entry to restore. User INVALID_INDEX to restore all.
  49. */
  50. void UnhookEntry(SIZE_T index = INVALID_INDEX);
  51. protected:
  52. /**
  53. From CHookBase.
  54. */
  55. virtual void RawCallFunction(NktHookCallContext*);
  56. void UnhookEntry(EntryData*);
  57. protected:
  58. const DV_PTR _vt;
  59. const NktCallingConvention _cc;
  60. Entries _entries;
  61. };
  62. #endif //_VTHOOK_H_