gpt4 book ai didi

c++ - ReadProcessMemory 的缓冲区应该是什么数据类型?

转载 作者:行者123 更新时间:2023-11-28 05:49:54 28 4
gpt4 key购买 nike

在所有示例中,我看到第三个参数或 buffer 是一个整数,但我不太确定这个值应该代表什么,或者它有什么用,所以我尝试了一个 char 数组并得到随机垃圾所以我很好奇这个值可以用于什么以及放入它的最佳容器以及数据类型是否取决于我们正在查询的值关于。

在查看我的代码后,我意识到我犯了一个非常愚蠢的错误,即在声明过程句柄时没有初始化它。不过这是我的代码,现在我得到了 ERROR_PARTIAL_COPY。而 dwRead 是 0.wtf

#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
system("tasklist");

SYSTEM_INFO SysInfo;
GetSystemInfo(&SysInfo);

DWORD proc_Id = 0;
cin >> proc_Id;
HANDLE hProc = INVALID_HANDLE_VALUE;
char value[500];
SIZE_T dwRead;

hProc = OpenProcess(PROCESS_ALL_ACCESS, TRUE, proc_Id);
if(hProc == NULL)
{
cout << "Error when trying to retrieve process handle" << endl;
}

void *baseAddr = (void*)hProc;

if(VirtualAllocEx(hProc, NULL, SysInfo.dwPageSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READ) == NULL)
{
cout << "VirtualAllocEx error" << endl;
}

if(ReadProcessMemory(hProc, baseAddr, &value, sizeof(value), &dwRead) == 0)
{
cout << "ReadProcessMemory failed: " << GetLastError() << endl;
}
cout << "Value is: " << value << endl;
cout << "Amount read successfully: " << dwRead << endl;
}

最佳答案

BOOL WINAPI ReadProcessMemory(
HANDLE hProcess,
LPCVOID lpBaseAddress,
LPVOID lpBuffer,
SIZE_T nSize,
SIZE_T *lpNumberOfBytesRead
);

参数声明为 LPVOID(void*typedef)。任何指针都可以隐式转换为指向 void 的指针——这意味着您提供的缓冲区实际上可以是您喜欢的任何类型。唯一的限制是它必须足够大以容纳 nSize 字节的数据。

SIZE_T dwRead;
int iValue;
if (ReadProcessMemory(hProcess, lpAddress, &iValue, sizeof(iValue), &dwRead)) // read an int
{
if (dwRead == sizeof(iValue))
{
// got int successfully
}
}

char buf[256];
if (ReadProcessMemory(hProcess, lpAddress, buf, sizeof(buf), &dwRead)) // read 256 chars
{
// got dwRead bytes successfully
}

如果您在返回的缓冲区中收到垃圾,可能是因为读取失败,或者没有读取您请求的那么多数据,并且您没有正确检查返回值。如果函数成功,lpNumberOfBytesRead 参数可让您找出成功读取了多少字节。

如果函数返回 0,则意味着它完全失败了 - 在这种情况下,您提供的缓冲区的内容是未定义的,不应使用。

关于c++ - ReadProcessMemory 的缓冲区应该是什么数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35473275/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com