Trampoline.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 _TRAMPOLINE_H_
  18. #define _TRAMPOLINE_H_
  19. #include "VirtualCode.h"
  20. #include "Utils.h"
  21. /**
  22. Trampoline code.
  23. */
  24. class NktTrampoline : public NktVirtualCode
  25. {
  26. friend class NktApiHook;
  27. public:
  28. typedef struct CallContext;
  29. public:
  30. NktTrampoline(unsigned short cleanSize = 0);
  31. NktTrampoline(const NktTrampoline&);
  32. /**
  33. Number of entrance in this functions.
  34. */
  35. UINT GetActiveCallCount() const;
  36. /**
  37. Param cleaning size.
  38. */
  39. USHORT GetCleanSize() const;
  40. /**
  41. Get custom tag.
  42. */
  43. INT_PTR GetTag() const;
  44. /**
  45. Set custom tag
  46. */
  47. void SetTag(INT_PTR);
  48. /**
  49. Initialize trampoline code with specified handler. Call only once.
  50. @handler is expected to be as follows:
  51. void class::*(DV_REGISTERS*, INT_PTR tag)
  52. */
  53. void Initialize(const NktFunctionWrapper& handler, LPCVOID pThis = NULL);
  54. protected:
  55. unsigned int _activeCallCount;
  56. unsigned short _cleanSize;
  57. INT_PTR _tag;
  58. };
  59. #endif _TRAMPOLINE_H_