Чтение памяти процесса всегда возвращает 0 - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь прочитать адрес памяти (тип с плавающей запятой). Так, он просто возвращает 0 в любом случае (я пробовал значения адресов памяти с плавающей запятой и т. Д.). В других программах (Cheat Engine) все работает.

#include <windows.h>
#include <process.h>
#include <iostream>

DWORD adresss = 0x00179574;
DWORD pid;
float id;



int main()
{
    HWND game = FindWindowA(0, ("Window name"));
    GetWindowThreadProcessId(game, &pid);
    HANDLE maincs = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
    for (;;)
    {
        ReadProcessMemory(maincs, (void*)adresss, &id, sizeof(int), 0);

        std::cout << id << std::endl;
        Sleep(100);
    }
}

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Проверьте свои вызовы Windows API, чтобы увидеть, если они не работают:

#include <Windows.h>
#include <iostream>
#include <vector>
#include <string>


LPVOID adresss = (LPVOID)0x00179574;
DWORD pid;
float id;

int main()
{
    HWND game;
    HANDLE maincs;

    if ((game = FindWindowA(0, ("Window name"))))
    {
        GetWindowThreadProcessId(game, &pid);
        if ((maincs = OpenProcess(PROCESS_VM_READ, FALSE, pid)))
        {
            for (;;)
            {
                if (ReadProcessMemory(maincs, adresss, &id, sizeof(float), 0))
                {
                    std::cout << id << std::endl;
                }
                else std::cout << "ReadProcessMemory failed with : " << GetLastError() << std::endl;

                Sleep(100);
            }
            CloseHandle(maincs);
        }
        else std::cout << "OpenProcess failed with : " << GetLastError() << std::endl;
    }
    else std::cout << "FindWindowA failed with : " << GetLastError() << std::endl;

    std::string dummy;
    std::cin >> dummy;
    return 0;
}

скажите нам, что он печатает или работает

0 голосов
/ 10 декабря 2018

Похоже, вы читаете значение int из процесса, но сохраняете его как float.Попробуйте изменить его на sizeof(float).Кроме того, сделайте address LPVOID, вместо того, чтобы приводить его к пустому указателю.

Если он все еще не работает, есть еще одна вещь.Адрес, который вы, кажется, читаете, кажется слишком маленьким.Общий адрес в этом процессе будет выглядеть как 0x7ff6d91c0000.

Кроме того, вам не нужно <Process.h>, а последний адрес ReadProcessMemory должен быть nullptr вместо 0.

...