内存管理-获得VU VSXu艺术家与c++

memory management - Get VU of VSXu artiste with C++

本文关键字:艺术家 c++ VSXu VU 管理 获得 内存      更新时间:2023-10-16

这是我到目前为止的代码:

#include "iostream"
#include "Windows.h"
#include "stdio.h"
using namespace std;

int main() {
    HWND hWnd = FindWindow(NULL,TEXT("Vovoid VSXu Artiste 0.4.0 [Windows 64-bit]"));
    if (hWnd == 0) {
        cerr << "Cannot find window "<< endl;
    }
    else {
        DWORD pId;
        GetWindowThreadProcessId(hWnd, &pId);
        cout << "Found Window at "<<pId << endl;
        HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pId);
        HMODULE hModule = GetModuleHandle(TEXT("sound.rtaudio.dll"));
        if (hProc == 0) {
            cerr << "Cannot open process." << endl;
        }else if(hModule==0){
            DWORD error = GetLastError();
            cerr << "could not find Module -> error: " <<error<< endl;
        }
        else {
            float val = 0;
            int addr = 0x04D40000 + 0x19098;//should be sound.rtaudio.dll+ 0x19098
            while(TRUE){
                int suc = ReadProcessMemory(hProc, (LPVOID)addr, &val, (DWORD)sizeof(val), NULL);
                if (suc > 0) {
                    cout << "Success reading " << val << " of " << hex << addr << endl;
                    system("cls");
                }
                else {
                    DWORD error = GetLastError();
                    cerr << "fail " << error << endl;
                }
            }

        }
        CloseHandle(hProc);
    }
    cin.get();
    return 0;
}

我想用c++在Cheat Engine的帮助下读取VSXu Artiste声音可视化程序的VU(声卡音量)值。它在ReadProcessMemory(hProc, (LPVOID)addr, &val, (DWORD)sizeof(val), NULL);上工作得很好,直到你重新打开VSXu。这是很明显的,因为我的值在Cheat Engine中的地址是"sound.rtaudio.dll+19098",DLL加载到一个"随机"地址。在作弊引擎,你可以简单地按Ctrl+G在内存查看器,并键入DLL的名称,以找到它的基址。我已经在c++中尝试了GetModuleHandle方法,但没有成功:

HMODULE hModule = GetModuleHandle(TEXT("sound.rtaudio.dll"));

有没有人知道如何获得与c++的dll的基址?

作弊引擎截图:http://oi57.tinypic.com/331k7sw.jpg

亲切的问候,罗伯特

问题是我想因为你在自己的进程中调用GetModuleHandle。您可以尝试的解决方案是使用:

GetModuleInformation,它将返回MODULEINFO中的基址:

lpBaseOfDll

模块的加载地址。

要获取进程和模块句柄,可以使用下面的示例代码: