BlackBone
Windows memory hacking library
 All Classes Functions
ProcessMemory.h
1 #pragma once
2 
3 #include "../Include/Winheaders.h"
4 #include "RPC/RemoteMemory.h"
5 #include "MemBlock.h"
6 
7 #include <vector>
8 #include <list>
9 
10 namespace blackbone
11 {
12 
14 {
15 public:
16  BLACKBONE_API ProcessMemory( class Process* process );
17  BLACKBONE_API ~ProcessMemory();
18 
26  BLACKBONE_API MemBlock Allocate( size_t size, DWORD protection = PAGE_EXECUTE_READWRITE, ptr_t desired = 0 );
27 
35  BLACKBONE_API NTSTATUS Free( ptr_t pAddr, size_t size = 0, DWORD freeType = MEM_RELEASE );
36 
43  BLACKBONE_API NTSTATUS Query( ptr_t pAddr, PMEMORY_BASIC_INFORMATION64 pInfo );
44 
53  BLACKBONE_API NTSTATUS Protect( ptr_t pAddr, size_t size, DWORD flProtect, DWORD *pOld = NULL );
54 
66  BLACKBONE_API NTSTATUS Read( ptr_t dwAddress, size_t dwSize, PVOID pResult, bool handleHoles = false );
67 
75  BLACKBONE_API NTSTATUS Write( ptr_t pAddress, size_t dwSize, const void* pData );
76 
82  template<class T>
83  inline T Read( ptr_t dwAddress )
84  {
85  T res;
86  Read( dwAddress, sizeof(T), &res );
87  return res;
88  };
89 
96  template<class T>
97  inline NTSTATUS Read( ptr_t dwAddress, T& result )
98  {
99  return Read( dwAddress, sizeof( result ), &result );
100  };
101 
108  template<class T>
109  inline NTSTATUS Write( ptr_t dwAddress, const T& data )
110  {
111  return Write( dwAddress, sizeof(T), &data );
112  }
113 
120  BLACKBONE_API size_t EnumRegions( std::list<MEMORY_BASIC_INFORMATION64>& results, bool includeFree = false );
121 
122  BLACKBONE_API inline class ProcessCore& core() { return _core; }
123  BLACKBONE_API inline class Process* process() { return _process; }
124 
125 private:
126  ProcessMemory( const ProcessMemory& ) = delete;
127  ProcessMemory& operator =(const ProcessMemory&) = delete;
128 
129 private:
130  class Process* _process; // Owning process object
131  class ProcessCore& _core; // Core routines
132 };
133 
134 }
BLACKBONE_API NTSTATUS Protect(ptr_t pAddr, size_t size, DWORD flProtect, DWORD *pOld=NULL)
Change memory protection
Definition: ProcessMemory.cpp:61
BLACKBONE_API NTSTATUS Free(ptr_t pAddr, size_t size=0, DWORD freeType=MEM_RELEASE)
Free memory
Definition: ProcessMemory.cpp:37
BLACKBONE_API NTSTATUS Read(ptr_t dwAddress, size_t dwSize, PVOID pResult, bool handleHoles=false)
Read data
Definition: ProcessMemory.cpp:81
BLACKBONE_API NTSTATUS Query(ptr_t pAddr, PMEMORY_BASIC_INFORMATION64 pInfo)
Get memory region info
Definition: ProcessMemory.cpp:48
BLACKBONE_API size_t EnumRegions(std::list< MEMORY_BASIC_INFORMATION64 > &results, bool includeFree=false)
Enumerate valid memory regions
Definition: ProcessMemory.cpp:142
Definition: RemoteMemory.h:13
Definition: ProcessMemory.h:13
Definition: Process.h:80
BLACKBONE_API MemBlock Allocate(size_t size, DWORD protection=PAGE_EXECUTE_READWRITE, ptr_t desired=0)
Allocate new memory block
Definition: ProcessMemory.cpp:25
NTSTATUS Write(ptr_t dwAddress, const T &data)
Write data
Definition: ProcessMemory.h:109
BLACKBONE_API NTSTATUS Write(ptr_t pAddress, size_t dwSize, const void *pData)
Write data
Definition: ProcessMemory.cpp:131
NTSTATUS Read(ptr_t dwAddress, T &result)
Read data
Definition: ProcessMemory.h:97
Definition: MemBlock.h:39
Definition: ProcessCore.h:13
T Read(ptr_t dwAddress)
Read data
Definition: ProcessMemory.h:83
Definition: AsmHelper32.cpp:6