【问题标题】:C++ Reading memory from a stringC++ 从字符串中读取内存
【发布时间】: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 函数

标签: c++ winapi memory


【解决方案1】:

您正在从进程内存中读取宽字符。 MessageBoxA 用于显示“窄”字符。

要显示宽字符,请使用MessageBoxW。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多