diff options
Diffstat (limited to 'WitnessRandomizer/Memory.cpp')
| -rw-r--r-- | WitnessRandomizer/Memory.cpp | 14 |
1 files changed, 6 insertions, 8 deletions
| diff --git a/WitnessRandomizer/Memory.cpp b/WitnessRandomizer/Memory.cpp index 6077691..0afeded 100644 --- a/WitnessRandomizer/Memory.cpp +++ b/WitnessRandomizer/Memory.cpp | |||
| @@ -47,30 +47,28 @@ Memory::~Memory() { | |||
| 47 | CloseHandle(_handle); | 47 | CloseHandle(_handle); |
| 48 | } | 48 | } |
| 49 | 49 | ||
| 50 | // Private methods: | ||
| 51 | |||
| 52 | void Memory::ThrowError() { | 50 | void Memory::ThrowError() { |
| 53 | std::string message(256, '\0'); | 51 | std::string message(256, '\0'); |
| 54 | FormatMessageA(4096, NULL, GetLastError(), 1024, &message[0], static_cast<DWORD>(message.length()), NULL); | 52 | FormatMessageA(4096, nullptr, GetLastError(), 1024, &message[0], static_cast<DWORD>(message.length()), nullptr); |
| 55 | std::cout << message.c_str() << std::endl; | 53 | std::cout << message.c_str() << std::endl; |
| 56 | exit(EXIT_FAILURE); | 54 | exit(EXIT_FAILURE); |
| 57 | } | 55 | } |
| 58 | 56 | ||
| 59 | uintptr_t Memory::ComputeOffset(std::vector<int> offsets) | 57 | void* Memory::ComputeOffset(std::vector<int> offsets) |
| 60 | { | 58 | { |
| 61 | // Leave off the last offset, since it will be either read/write, and may not be of type unitptr_t. | 59 | // Leave off the last offset, since it will be either read/write, and may not be of type unitptr_t. |
| 62 | int final_offset = offsets.back(); | 60 | int final_offset = offsets.back(); |
| 63 | offsets.pop_back(); | 61 | offsets.pop_back(); |
| 64 | 62 | ||
| 65 | uintptr_t cumulativeAddress = _baseAddress; | 63 | uintptr_t cumulativeAddress = _baseAddress; |
| 66 | for (int offset : offsets) { | 64 | for (const int offset : offsets) { |
| 67 | cumulativeAddress += offset; | 65 | cumulativeAddress += offset; |
| 68 | 66 | ||
| 69 | auto search = _computedAddresses.find(cumulativeAddress); | 67 | const auto search = _computedAddresses.find(cumulativeAddress); |
| 70 | if (search == std::end(_computedAddresses)) { | 68 | if (search == std::end(_computedAddresses)) { |
| 71 | // If the address is not yet computed, then compute it. | 69 | // If the address is not yet computed, then compute it. |
| 72 | uintptr_t computedAddress = 0; | 70 | uintptr_t computedAddress = 0; |
| 73 | if (!ReadProcessMemory(_handle, (LPVOID)cumulativeAddress, &computedAddress, sizeof(uintptr_t), NULL)) { | 71 | if (!ReadProcessMemory(_handle, reinterpret_cast<LPVOID>(cumulativeAddress), &computedAddress, sizeof(uintptr_t), NULL)) { |
| 74 | ThrowError(); | 72 | ThrowError(); |
| 75 | } | 73 | } |
| 76 | _computedAddresses[cumulativeAddress] = computedAddress; | 74 | _computedAddresses[cumulativeAddress] = computedAddress; |
| @@ -78,5 +76,5 @@ uintptr_t Memory::ComputeOffset(std::vector<int> offsets) | |||
| 78 | 76 | ||
| 79 | cumulativeAddress = _computedAddresses[cumulativeAddress]; | 77 | cumulativeAddress = _computedAddresses[cumulativeAddress]; |
| 80 | } | 78 | } |
| 81 | return cumulativeAddress + final_offset; | 79 | return reinterpret_cast<void*>(cumulativeAddress + final_offset); |
| 82 | } | 80 | } |
