diff options
Diffstat (limited to 'Source/Memory.cpp')
-rw-r--r-- | Source/Memory.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/Source/Memory.cpp b/Source/Memory.cpp index bc0725b..e240b90 100644 --- a/Source/Memory.cpp +++ b/Source/Memory.cpp | |||
@@ -170,7 +170,10 @@ void* Memory::ComputeOffset(std::vector<int> offsets) { | |||
170 | cumulativeAddress += offset; | 170 | cumulativeAddress += offset; |
171 | 171 | ||
172 | const auto search = _computedAddresses.find(cumulativeAddress); | 172 | const auto search = _computedAddresses.find(cumulativeAddress); |
173 | if (search == std::end(_computedAddresses)) { | 173 | // This is an issue with re-randomization. Always. Just disable it in debug mode! |
174 | #ifdef NDEBUG | ||
175 | if (search == std::end(_computedAddresses)) { | ||
176 | #endif | ||
174 | // If the address is not yet computed, then compute it. | 177 | // If the address is not yet computed, then compute it. |
175 | uintptr_t computedAddress = 0; | 178 | uintptr_t computedAddress = 0; |
176 | if (bool result = !ReadProcessMemory(_handle, reinterpret_cast<LPVOID>(cumulativeAddress), &computedAddress, sizeof(uintptr_t), NULL)) { | 179 | if (bool result = !ReadProcessMemory(_handle, reinterpret_cast<LPVOID>(cumulativeAddress), &computedAddress, sizeof(uintptr_t), NULL)) { |
@@ -180,7 +183,9 @@ void* Memory::ComputeOffset(std::vector<int> offsets) { | |||
180 | ThrowError(); | 183 | ThrowError(); |
181 | } | 184 | } |
182 | _computedAddresses[cumulativeAddress] = computedAddress; | 185 | _computedAddresses[cumulativeAddress] = computedAddress; |
186 | #ifdef NDEBUG | ||
183 | } | 187 | } |
188 | #endif | ||
184 | 189 | ||
185 | cumulativeAddress = _computedAddresses[cumulativeAddress]; | 190 | cumulativeAddress = _computedAddresses[cumulativeAddress]; |
186 | } | 191 | } |
@@ -188,6 +193,21 @@ void* Memory::ComputeOffset(std::vector<int> offsets) { | |||
188 | } | 193 | } |
189 | 194 | ||
190 | uintptr_t Memory::Allocate(size_t bytes) { | 195 | uintptr_t Memory::Allocate(size_t bytes) { |
196 | /* | ||
197 | uintptr_t ForeignProcessMemory::AllocateMemory(size_t Size, DWORD Flags) const { | ||
198 | if (!ProcessHandle) { | ||
199 | return 0; | ||
200 | } | ||
201 | return (uintptr_t)VirtualAllocEx(ProcessHandle, nullptr, Size, MEM_RESERVE | MEM_COMMIT, Flags); | ||
202 | } | ||
203 | |||
204 | void ForeignProcessMemory::DeallocateMemory(uintptr_t Addr) const { | ||
205 | if (!ProcessHandle || Addr == 0) { | ||
206 | return; | ||
207 | } | ||
208 | VirtualFreeEx(ProcessHandle, (void*)Addr, 0, MEM_RELEASE); | ||
209 | } | ||
210 | */ | ||
191 | uintptr_t current = _freeMem; | 211 | uintptr_t current = _freeMem; |
192 | _freeMem += bytes; | 212 | _freeMem += bytes; |
193 | 213 | ||