阅读流程内容

问题描述 投票:0回答:1

我正在尝试读取当前进程的内容以查找模式,我通过调用

GetModuleHandleA()
获得指向基地址的指针,然后想要循环遍历它并保持匹配字节,但我不知道最大是多少我可以循环播放的大小?

我尝试读取文件的大小并将文件大小用作最大循环计数器。

以下是我到目前为止编写的代码,

    const char buf[] = { 0x40, 0x35, 0x02, 0x00, 0x78, 0x00 };

    char ProcessFilePath[MAX_PATH];
    GetModuleFileNameA(NULL, ProcessFilePath, MAX_PATH);
    HANDLE hFile = CreateFileA(ProcessFilePath,
        GENERIC_READ,
        FILE_SHARE_READ | FILE_SHARE_WRITE,
        NULL,
        OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL,
        NULL);
    if (hFile == INVALID_HANDLE_VALUE)
        return -1;
    LARGE_INTEGER size;
    GetFileSizeEx(hFile, &size);

    const unsigned char* lpImage = (unsigned char*)GetModuleHandleA(NULL);

    int maincounter = 0;
    int patternsize = sizeof(buf);
    for (int maincounter = 0; maincounter < size.LowPart; maincounter++)
    {
        printf("%02x", lpImage[maincounter]);
    }

如何读取所有进程内存?确定进程内存大小的正确方法是什么?

谢谢

c++ windows winapi
1个回答
0
投票

感谢@500 - Internal Server Error评论,我使用了ToolHelp API,我的问题得到了解决,

DWORD GetModuleBaseAddress() 
{ 
  
    MODULEENTRY32 me32  = { sizeof(MODULEENTRY32) }; 
    HANDLE hSnapshot    = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId()); 

    if (hSnapshot == INVALID_HANDLE_VALUE) {
        return 0; 
    }
        
    if (Module32First( hSnapshot, &me32 )) { 
        CloseHandle( hSnapshot );
        return (DWORD)me32.modBaseAddr; 
    }

    CloseHandle(hSnapshot); 
    return 0; 
}
© www.soinside.com 2019 - 2024. All rights reserved.