#pragma once #include #include #include // https://github.com/erayarslan/WriteProcessMemory-Example // http://stackoverflow.com/q/32798185 // http://stackoverflow.com/q/36018838 // http://stackoverflow.com/q/1387064 class Memory { public: Memory(const std::string& processName); ~Memory(); template std::vector ReadData(const std::vector& offsets, int numItems) { std::vector data; data.resize(numItems); if (!ReadProcessMemory(_handle, (LPVOID)ComputeOffset(offsets), &data[0], sizeof(T) * numItems, NULL)) { ThrowError(); } return data; } template void WriteData(const std::vector& offsets, const std::vector& data) { if (!WriteProcessMemory(_handle, (LPVOID)ComputeOffset(offsets), &data[0], sizeof(T) * data.size(), NULL)) { ThrowError(); } } private: void ThrowError(); uintptr_t ComputeOffset(std::vector offsets); uintptr_t _baseAddress; HANDLE _handle; };