From be5131b0d239cc4afc83cbe1bebc9a5d74876079 Mon Sep 17 00:00:00 2001 From: Aaron M Date: Sat, 2 May 2020 12:19:38 +1200 Subject: [PATCH] Add Helper function for Reading/Writing memory if necessary --- OpenParrot/src/Utility/Helper.cpp | 70 +++++++++++++++++++++++++++++++ OpenParrot/src/Utility/Helper.h | 15 +++++++ 2 files changed, 85 insertions(+) create mode 100644 OpenParrot/src/Utility/Helper.cpp create mode 100644 OpenParrot/src/Utility/Helper.h diff --git a/OpenParrot/src/Utility/Helper.cpp b/OpenParrot/src/Utility/Helper.cpp new file mode 100644 index 0000000..a70d34e --- /dev/null +++ b/OpenParrot/src/Utility/Helper.cpp @@ -0,0 +1,70 @@ +#include +#include "Helper.h" + +typedef unsigned char U8; + +// reading/writing memory +LPVOID Helpers::GetTranslatedOffset(INT_PTR offset) +{ + return reinterpret_cast((INT_PTR)GetModuleHandle(NULL) + offset); +} + +UINT8 Helpers::ReadByte(INT_PTR offset, bool isRelativeOffset) +{ + UINT8 val = 0; + SIZE_T read; + LPVOID trueOffset = (isRelativeOffset ? GetTranslatedOffset(offset) : (LPVOID)offset); + ReadProcessMemory(GetCurrentProcess(), trueOffset, &val, sizeof(UINT8), &read); + return val; +} + +float Helpers::WriteFloat32(INT_PTR offset, float val, bool isRelativeOffset) +{ + SIZE_T written; + LPVOID trueOffset = (isRelativeOffset ? GetTranslatedOffset(offset) : (LPVOID)offset); + WriteProcessMemory(GetCurrentProcess(), trueOffset, &val, sizeof(float), &written); + return val; +}; + +UINT8 Helpers::WriteByte(INT_PTR offset, UINT8 val, bool isRelativeOffset) +{ + SIZE_T written; + LPVOID trueOffset = (isRelativeOffset ? GetTranslatedOffset(offset) : (LPVOID)offset); + WriteProcessMemory(GetCurrentProcess(), trueOffset, &val, sizeof(UINT8), &written); + return val; +} + +INT_PTR Helpers::WriteIntPtr(INT_PTR offset, INT_PTR val, bool isRelativeOffset) +{ + SIZE_T written; + LPVOID trueOffset = (isRelativeOffset ? GetTranslatedOffset(offset) : (LPVOID)offset); + WriteProcessMemory(GetCurrentProcess(), trueOffset, &val, sizeof(INT_PTR), &written); + return val; +}; + +int Helpers::ReadInt32(INT_PTR offset, bool isRelativeOffset) +{ + int val = 0; + SIZE_T read; + LPVOID trueOffset = (isRelativeOffset ? GetTranslatedOffset(offset) : (LPVOID)offset); + ReadProcessMemory(GetCurrentProcess(), trueOffset, &val, sizeof(int), &read); + return val; +} + +INT_PTR Helpers::ReadIntPtr(INT_PTR offset, bool isRelativeOffset) +{ + SIZE_T read; + LPVOID trueOffset = (isRelativeOffset ? GetTranslatedOffset(offset) : (LPVOID)offset); + INT_PTR val; + ReadProcessMemory(GetCurrentProcess(), trueOffset, &val, sizeof(INT_PTR), &read); + return val; +}; + +float Helpers::ReadFloat32(INT_PTR offset, bool isRelativeOffset) +{ + float val = 0.0f; + SIZE_T read; + LPVOID trueOffset = (isRelativeOffset ? GetTranslatedOffset(offset) : (LPVOID)offset); + ReadProcessMemory(GetCurrentProcess(), trueOffset, &val, sizeof(float), &read); + return val; +}; \ No newline at end of file diff --git a/OpenParrot/src/Utility/Helper.h b/OpenParrot/src/Utility/Helper.h new file mode 100644 index 0000000..3f99200 --- /dev/null +++ b/OpenParrot/src/Utility/Helper.h @@ -0,0 +1,15 @@ +#pragma once +#include + +class Helpers { +public: + // reading/writing memory + LPVOID GetTranslatedOffset(INT_PTR offset); + int ReadInt32(INT_PTR offset, bool isRelativeOffset); + UINT8 ReadByte(INT_PTR offset, bool isRelativeOffset); + float WriteFloat32(INT_PTR offset, float val, bool isRelativeOffset); + UINT8 WriteByte(INT_PTR offset, UINT8 val, bool isRelativeOffset); + INT_PTR WriteIntPtr(INT_PTR offset, INT_PTR val, bool isRelativeOffset); + INT_PTR ReadIntPtr(INT_PTR offset, bool isRelativeOffset); + float ReadFloat32(INT_PTR offset, bool isRelativeOffset); +};