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 的回答指出了另一个错误:您正在查看字符串的错误位置。
我掌握了 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 的回答指出了另一个错误:您正在查看字符串的错误位置。