C++ReadProcessMemory返回奇怪的字符
C++ ReadProcessMemory returns strange character
我试图用以下代码读取进程的内存:
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;}
但当我启动并输入地址时,如:0x7ffe0014
它打印以下内容:╠╠╠╠╠╠╠╠(这个*256我想)
但我不知道为什么。
你能帮我吗?非常感谢。
缓冲区被定义为一个字符,当您将缓冲区传递给std::cout时,它会打印存储在缓冲区中的字节的字符表示。您试图通过对任意内存地址调用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;
这将正确地将"数据读取:测试"输出到控制台。
如果你将nullptr分配给"char*me",你会得到同样的结果╠╠╠╠╠╠╠╠"之前得到的mumbo jumbo,因为它将指向通常未初始化的地址0x0
请记住,如果你试图从另一个进程读取字符串,如果硬编码的字符串不是以null结尾,并且只读取正确的字节数,你会希望对其大小进行反向工程。
相关文章:
- 为什么 Serial.println(<char[]>);返回随机字符?
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何返回/复制unique_ptr<无符号字符[]>的值?
- 在函数中返回无符号字符数组,但不返回指针
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- std::stringstream 返回字符 *
- 如何循环访问 cpp 中的函数返回的字符指针数组
- 为什么我的字符* 复印机返回不同的东西?
- strcmp 对于相等的字符序列返回 false
- 如何在数组中返回负字符?
- 为什么当作为常量字符* 返回时会在此处创建临时字符串?[斯特劳斯特鲁普的书例]
- isalpha() 函数为字符串中的字符返回 false
- 使用 const 指针的 C 样式字符返回不正确的结果
- 字符返回函数指针C++
- 'isprint' 为 Solaris 上的不可打印字符返回 true
- 常量字符* 返回类型
- C++字符返回输出符号
- 无符号字符返回值和+=出现问题
- _带有_O_U8TEXT标志的wsopen_s,向缓冲区、中间字符和4个中间俄语字符返回0.VS2010
- 将常量字符* 返回到字符*,然后更改数据