C++ 读取 LPCVOID 指针的值

C++ Reading values of LPCVOID pointer

我掌握了 kernel32.dll 的 Writefile 命令。正在触发挂钩,但是,我无法读取缓冲区内容。

目标: Msgbox 显示正在发送到 com 端口的缓冲区内容。

问题: msgbox 正在打印一系列看似随机的数字,我假设这是内存地址,而不是 lpBuffer 的实际内容。

C++代码:

void hookedFunc(HANDLE hfile, LPCVOID * lpBuffer, DWORD nNumberBytesToWrite, LPWORD lpNumberofBytesWritten, LPOVERLAPPED lpOverlapped) {

    char *pString = reinterpret_cast<char *>(lpBuffer);

    //Msgbox - arg 1//////////////////////////////////////////////////////////////////////////////
    WCHAR szTest[45];
    swprintf_s(szTest, 45, L"%d|\n", pString);
    MessageBox(NULL, szTest, L"BUFFER CONTENTS", MB_OK);
    swprintf_s(szTest, 45, L"%d", nNumberBytesToWrite);
    MessageBox(NULL, szTest, L"TEST", MB_OK);

}

LPCVOID 是一个指针(指向一个常量),lpBuffer 是一个指向该指针的指针。我想

const char* pString = reinterpret_cast<const char *>(*lpBuffer);

就是你想要的。

在您的示例中,szTest 将包含垃圾,因为

swprintf_s(szTest, 45, L"%d|\n", pString);

说将 pString 解释为整数(感谢 %d)并将该整数转换为 ascii 并将其存储在 szTest

所以是的,您正在打印一个地址,但可能只是其中的一部分。

附录:

Captain Giraffe 的回答指出了另一个错误:您正在查看字符串的错误位置。