不是很教授。使用C ++。我一直在处理的代码是:https://msdn.microsoft.com/en-us/library/windows/desktop/ee175819(v=vs.85).aspx

我的问题出在这方面:

_tprintf(TEXT("  Data portion begins at: %#p\n  Size: %d bytes\n") \
             TEXT("  Overhead: %d bytes\n  Region index: %d\n\n"),
             Entry.lpData,
             Entry.cbData,
             Entry.cbOverhead,
             Entry.iRegionIndex);
}


我面临的问题是,Entry.lpData是堆块的数据部分的地址。我想在Entry.lpData地址之前读取8个字节。所以当我简单地从Entry.lpData中减去8并尝试读取字节时,我得到了错误

hexDump(entry.lpData - 8, 8);


heapwalk.cpp(119): error C2036: 'PVOID' : unknown size

最佳答案

指向void的指针是指向任何内容的指针,因此直接对它们执行指针算术是没有意义的。在这种情况下,由于您知道需要8个字节的偏移量,因此只需将其首先转换为char*即可。通常,您会知道它实际指向哪种数据,并将其强制转换为该类型的指针。

char *p = static_cast<char*>(entry.lpData) - 8;


之所以可行,是因为char*the strict aliasing rule的例外。请勿尝试使用任意类型。

关于c++ - 从LPVOID减去,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28373744/

10-12 20:50