【发布时间】:2021-09-13 00:15:50
【问题描述】:
我试图从 explorer.exe 读取内存。通过程序进程黑客,我发现在地址0xfa07f8 上存储了这个字符串:\??\C:\Program Files\Process Hacker 2\ProcessHacker.exe
当我尝试读取这个地址的字符串时,我只得到了字符串的第一个字符。 '\' 字符。 如何读取整个字符串?
char buffer[255] = { 0 };
unsigned addr = 0xfa07f8;
if (ReadProcessMemory(proc, (LPVOID)addr, &buffer, sizeof(buffer), NULL))
{
MessageBoxA(NULL, buffer, NULL, NULL);
}
【问题讨论】:
-
字符串将采用 Unicode UTF-16 格式,对于 ASCII 字符,每隔一个字节将为 0。
-
使用调试器检查
buffer的内容时会看到什么? -
@RichardCritten Windows 内部是否使用 UTF-16?
-
您可能从该地址读取了
bstr_t值,`\??\` 表示前缀字符串长度,您在此处看到可打印字符只是偶然。 -
@TedLyngmo 是的,它起作用了。刚刚用 MessageBoxA 替换了 MessageBoxA 函数