From 0baa521ba34d2cd4e0f732f83d23b807605786a2 Mon Sep 17 00:00:00 2001 From: jbzdarkid Date: Sat, 16 Nov 2019 10:27:06 -0800 Subject: More and more progress. Split out functions in serializer Figured out how to allocate memory (for sequences) --- Source/Memory.h | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) (limited to 'Source/Memory.h') diff --git a/Source/Memory.h b/Source/Memory.h index 6b8403f..af4f0ae 100644 --- a/Source/Memory.h +++ b/Source/Memory.h @@ -35,7 +35,14 @@ public: template void WriteArray(int panel, int offset, const std::vector& data) { - WriteData({GLOBALS, 0x18, panel*8, offset, 0}, data); + WriteData({GLOBALS, 0x18, panel*8, offset, 0}, data); + } + + template + void WriteNewArray(int panel, int offset, const std::vector& data) { + std::vector newAddr = {Allocate(data.size() * sizeof(T))}; + WritePanelData(panel, offset, newAddr); + WriteArray(panel, offset, data); } template @@ -45,7 +52,7 @@ public: template void WritePanelData(int panel, int offset, const std::vector& data) { - WriteData({GLOBALS, 0x18, panel*8, offset}, data); + WriteData({GLOBALS, 0x18, panel*8, offset}, data); } void AddSigScan(const std::vector& scanBytes, const std::function& scanFunc); @@ -57,9 +64,12 @@ private: if (numItems == 0) return {}; std::vector data; data.resize(numItems); + void* computedOffset = ComputeOffset(offsets); for (int i=0; i<5; i++) { - if (ReadProcessMemory(_handle, ComputeOffset(offsets), &data[0], sizeof(T) * numItems, nullptr)) - { + if (ReadProcessMemory(_handle, computedOffset, &data[0], sizeof(T) * numItems, nullptr)) { + if (i != 0) { + int k = 0; + } return data; } } @@ -70,8 +80,12 @@ private: template void WriteData(const std::vector& offsets, const std::vector& data) { if (data.empty()) return; + void* computedOffset = ComputeOffset(offsets); for (int i=0; i<5; i++) { - if (WriteProcessMemory(_handle, ComputeOffset(offsets), &data[0], sizeof(T) * data.size(), nullptr)) { + if (WriteProcessMemory(_handle, computedOffset, &data[0], sizeof(T) * data.size(), nullptr)) { + if (i != 0) { + int k = 0; + } return; } } @@ -82,6 +96,7 @@ private: bool Initialize(); void ThrowError(); void* ComputeOffset(std::vector offsets); + uintptr_t Allocate(size_t bytes); int _previousFrame = 0; bool _threadActive = false; @@ -90,6 +105,8 @@ private: std::map _computedAddresses; uintptr_t _baseAddress = 0; HANDLE _handle = nullptr; + uintptr_t _freeMem = 0; + uintptr_t _freeMemEnd = 0; struct SigScan { std::function scanFunc; bool found; -- cgit 1.4.1