Как получить адрес ячейки памяти?

Sadow

Известный
Автор темы
1,437
585
Как получить адрес ячейки памяти?
Я смог найти адрес указателя - server.dll+A4ABA4 и оффсет - 230
Я пытался сделать самостоятельно, но значение отличается от нужного

Код main.cpp:
C++:
#include <iostream>
#include "memory.h"

using namespace std;

PModule Base;
memory mem;

int main() {
    while (!mem.Attach("csgo.exe", PROCESS_ALL_ACCESS)) {}
    Base = mem.GetModule("server.dll");

    while (true) {
        if (GetAsyncKeyState(VK_UP)) {
            int hp = mem.Read<int>(Base.dwBase + 0xA4ABA4 + 0x230);
            cout << hp << endl;
        }
    }
}
Код memory.h:
C++:
#include <Windows.h>
#include <TlHelp32.h>
#include <comdef.h>

struct PModule
{
    DWORD dwBase;
    DWORD dwSize;
};

class memory {
public:
    inline bool Attach(const char* pName, DWORD dwAccess) {
        HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
        PROCESSENTRY32 entry{};
        entry.dwSize = sizeof(entry);

        do
            if (!strcmp(_bstr_t(entry.szExeFile), pName)) {
                _pId = entry.th32ProcessID;
                CloseHandle(handle);
                _process = OpenProcess(dwAccess, false, _pId);
                return true;
            }
        while (Process32Next(handle, &entry));
        return false;
    }

    inline PModule GetModule(const char* pModule) {
        HANDLE module = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, _pId);
        MODULEENTRY32 entry{};
        entry.dwSize = sizeof(entry);

        do
            if (!strcmp(_bstr_t(entry.szModule), pModule)) {
                CloseHandle(module);
                return PModule{ reinterpret_cast<DWORD>(entry.hModule), entry.modBaseSize };
            }
        while (Module32Next(module, &entry));

        return PModule{ 0, 0 };
    }

    template <class T>
    T Read(const DWORD dwAddress) {
        T _read{};
        ReadProcessMemory(_process, LPVOID(dwAddress), &_read, sizeof(T), NULL);
        return _read;
    }

    template <class T>
    void Write(const DWORD dwAddress, const T value) {
        WriteProcessMemory(_process, LPVOID(dwAddress), &value, sizeof(T), NULL);
    }

    void Exit() {
        CloseHandle(_process);
    }

private:
    HANDLE _process;
    DWORD _pId;
};
 

Sadow

Известный
Автор темы
1,437
585
Последнее редактирование: