C++ C++;ReadProcessMemory返回奇怪字符

C++ C++;ReadProcessMemory返回奇怪字符,c++,windows,winapi,char,readprocessmemory,C++,Windows,Winapi,Char,Readprocessmemory,我尝试使用以下代码读取进程的内存: int main() { HANDLE hProcess = OpenProcess(PROCESS_VM_READ, 0, FindProcessId()); DWORD me; cin >> me; char buffer[256]; ReadProcessMemory(hProcess, (LPVOID)me, &buffer, sizeof(buffer), 0); cout << "Data read : "

我尝试使用以下代码读取进程的内存:

int main() {
HANDLE hProcess = OpenProcess(PROCESS_VM_READ, 0, FindProcessId());

DWORD me;
cin >> me;

char buffer[256];

ReadProcessMemory(hProcess, (LPVOID)me, &buffer, sizeof(buffer), 0);

cout << "Data read : " << buffer << endl;

system("pause");

return 0;}
intmain(){
HANDLE hProcess=OpenProcess(PROCESS_VM_READ,0,FindProcessId());
德沃德:我;
中国>>我;
字符缓冲区[256];
ReadProcessMemory(hProcess,(LPVOID)me和buffer,sizeof(buffer),0);

coutbuffer被定义为char,当您将buffer传递给std::cout时,它将打印存储在buffer中的字节的char表示形式。您试图通过对任意内存地址调用ReadProcessMemory()来填充缓冲区,但失败了

缓冲区未初始化,由于ReadProcessMemory失败,它正在打印缓冲区内未初始化内存的字符表示

下面是修改后的代码,用于在当前进程中对变量调用ReadProcessMemory,这可能更便于学习

HANDLE hProcess = OpenProcess(PROCESS_VM_READ, 0, GetCurrentProcessId());

char buffer[20];

char* me = "Test";

ReadProcessMemory(hProcess, me, &buffer, sizeof(me)+1, 0);

std::cout << "Data read : " << buffer << std::endl;

system("pause");

return 0;
HANDLE hProcess=OpenProcess(PROCESS\u VM\u READ,0,GetCurrentProcessId());
字符缓冲区[20];
char*me=“测试”;
ReadProcessMemory(hProcess、me和buffer,sizeof(me)+1,0);

std::cout调用它时,
ReadProcessMemory()
返回什么?如果
0
,则它失败并且
buffer
可能未更新;然后必须调用
GetLastError()
查看错误是什么。您读取的数据是可打印的吗?它应该是以null结尾的字符串吗?您希望打印什么?请花一些时间。以及您在地址
7ffe0014
处等待的内容?打印内容的意义是什么?您读取的是任意字节块。即使您使用类型
char
这并不意味着它实际上是可以打印的,它只是字节的不确定数据。你不做任何错误检查。任何钱都说其中一个调用失败。