Very easy to use class to read and modify other processes memory on Windows.
And the best thing is: it supports multi-level-pointers out of the box!
#include"Memory.hpp"using std::string;intmain() {SetConsoleTitle("Memory Class Test");char* TARGET_PROCESS_NAME ="League of Legends.exe"; HANDLE processHandle;int baseAddress;///////////////////////////////////////////////////////////////////////////////////* Note: These pointers/offsets are probably outdated by the time you read this*/int GAME_VERSION_MODULE_OFFSET =0x2A1D738;int PLAYERS_MODULE_OFFSET =0x1DAAED4;int HEALTH_OFFSET =0x124;int MANA_OFFSET =0x190;////////////////////////////////////////////////////////////////////////////////// Memory Memory; Memory.GetDebugPrivileges(); processId = Memory.GetProcessId(TARGET_PROCESS_NAME); processHandle =OpenProcess(PROCESS_ALL_ACCESS,false, processId); baseAddress = Memory.GetModuleBase(processHandle, (string)TARGET_PROCESS_NAME); std::cout <<"Base address for module\"" << TARGET_PROCESS_NAME <<"\" is" << baseAddress <<" (in dec)..."<< std::endl;int playersAddress = baseAddress + PLAYERS_MODULE_OFFSET;int gameVersionAddress = baseAddress + GAME_VERSION_MODULE_OFFSET;int ptrOffset[] = {0x0};//0x0 offset is for player one. 0x4 would be player 2 etcint playerOneAddress = Memory.ReadPointerInt(processHandle, playersAddress, ptrOffset,1);float playerOneHealth = Memory.ReadFloat(processHandle, playerOneAddress + HEALTH_OFFSET);float playerOneMana = Memory.ReadFloat(processHandle, playerOneAddress + MANA_OFFSET); string gameVersion = Memory.ReadText(processHandle, gameVersionAddress); std::cout <<"Game version:" << gameVersionAddress << std::endl; std::cout <<"Player one has" << playerOneHealth <<" health!" std::endl; std::cout <<"Player one has" << playerOneMana <<" mana!" std::endl; cin.get();return0;}