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

PlugIns编程

开发平台:

Visual C++

  1. #ifndef _MEMORY_H_
  2. #define _MEMORY_H_
  3. #include "types.h"
  4. #include "yasper.h"
  5. /**
  6. Memory Page Protections
  7. */
  8. typedef enum _NktMemoryProtection
  9. {
  10. NktMemoryProtectionNoAccess = 0,
  11. NktMemoryProtectionExecute = 1,
  12. NktMemoryProtectionRead = 2,
  13. NktMemoryProtectionWrite = 4,
  14. NktMemoryProtectionWriteCopy = 8,
  15. NktMemoryProtectionGuard = 16,
  16. NktMemoryProtectionNoCache = 32,
  17. NktMemoryProtectionWriteCombine = 64
  18. } NktMemoryProtection;
  19. /**
  20. Class to provide memory access in any process.
  21. */
  22. class NktMemory
  23. {
  24. public:
  25. NktMemory();
  26. NktMemory(const NktMemory&);
  27. NktMemory(DV_PTR ptr, DWORD pid = GetCurrentProcessId());
  28. NktMemory(void* ptr, DWORD pid = GetCurrentProcessId());
  29. /**
  30. Read a region of memory. <br>
  31. buffer must be big enough.
  32. */
  33. SIZE_T Read(SIZE_T offset, SIZE_T size, OUT DV_PTR buffer) const;
  34. SIZE_T Read(SIZE_T offset, SIZE_T size, OUT void* buffer) const;
  35. /**
  36. Get the ASCII string length pointed at offset.
  37. */
  38. SIZE_T GetStringLengthA(SIZE_T offset) const;
  39. SIZE_T GetStringLengthW(SIZE_T offset) const;
  40. /**
  41. Write into a region of memory.
  42. */
  43. SIZE_T Write(SIZE_T offset, SIZE_T size, IN const DV_PTR src);
  44. SIZE_T Write(SIZE_T offset, SIZE_T size, IN const void* src);
  45. /**
  46. Retrieves the protections flags.<br>
  47. @allocated: if TRUE return the protection when it was allocated, instead of protection.
  48. */
  49. DWORD GetProtection(SIZE_T offset, BOOL allocated = TRUE) const;
  50. /**
  51. Returns if the memory address is executable.<br>
  52. @allocated: if TRUE return the protection when it was allocated, instead of protection.
  53. */
  54. BOOL IsExecutable(SIZE_T offset, BOOL allocated = TRUE) const;
  55. /**
  56. Get current address.
  57. */
  58. DV_PTR GetAddress() const;
  59. /**
  60. Set the base address of the memory. If this address is not zero any operation with the object will be summed to this address.
  61. */
  62. void SetAddress(DV_PTR ptr);
  63. /**
  64. Get process id.
  65. */
  66. DWORD GetProcessId() const;
  67. /**
  68. Change Process id
  69. */
  70. void SetProcessId(DWORD pid);
  71. public:
  72. /**
  73. Change protection on memory segment.
  74. @returns previous protection.
  75. */
  76. static DWORD SetProtection(HANDLE hProc, const DV_PTR addr, SIZE_T size, DWORD prot);
  77. static DWORD SetProtection(HANDLE hProc, const void* addr, SIZE_T size, DWORD prot);
  78. protected:
  79. /**
  80. Retrieves a MEMORY_BASIC_INFORMATION from an offset
  81. */
  82. void GetMemoryInfo(SIZE_T offset, OUT MEMORY_BASIC_INFORMATION* pMemInfo) const;
  83. /**
  84. Build a MemoryProtections based on a DWORD
  85. */
  86. DWORD MapProtectionFlag( DWORD win32Protection ) const;
  87. protected:
  88. DWORD _pid;
  89. void* _ptr;
  90. };
  91. #endif //_MEMORY_H_