VirtualCode.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 _VirtualCode_H_ 
  18. #define _VirtualCode_H_
  19. #include "AsmCode.h"
  20. /**
  21. This class provides facilities to write assembly code on runtime.
  22. */
  23. class NktVirtualCode : public NktAsmCode
  24. {
  25. public:
  26. NktVirtualCode(const unsigned int pages = 1, const DWORD proc_id = GetCurrentProcessId());
  27. NktVirtualCode(const NktVirtualCode&);
  28. /**
  29. Load code from an address.
  30. */
  31. const SIZE_T ReadFrom(const void* addr, const SIZE_T count);
  32. /**
  33. Write the current code to an address.
  34. */
  35. const BOOL WriteTo(void* addr);
  36. /**
  37. Append an instruction.
  38. */
  39. const BOOL Append(asmcode opcode);
  40. const BOOL Append(asmcodew opcode);
  41. const BOOL Append(asmcode opcode, unsigned int param);
  42. const BOOL Append(asmcode opcode, unsigned short param);
  43. const BOOL Append(asmcode opcode, unsigned char param);
  44. const BOOL Append(asmcodew opcode, unsigned int param);
  45. const BOOL Append(asmcodew opcode, unsigned short param);
  46. const BOOL Append(asmcodew opcode, unsigned char param);
  47. const BOOL Append(const NktVirtualCode& code);
  48. const BOOL AppendJump(DV_PTR address);
  49. const BOOL AppendCall(DV_PTR address);
  50. /**
  51. Raw write in the code.
  52. */
  53. void RawWrite(const unsigned int offset, unsigned int val);
  54. /**
  55. Raw read from the code.
  56. */
  57. void RawRead(unsigned int offset, unsigned int* out_val);
  58. /**
  59. Current size of the code.
  60. */
  61. const SIZE_T Pivot() const;
  62. /**
  63. Clear the code and sets the pivot at the beginning.
  64. */
  65. void Clear();
  66. protected:
  67. SIZE_T _pivot;
  68. const DWORD _procId;
  69. };
  70. #endif //_CVirtualCode_H_