我正在使用 C++ 非托管,当我调用返回 LPVOID 的方法时出现的问题。
LPVOID MyMethod(...);
问题是这个方法有时会返回一个错误的 Ptr,我想知道是否有办法检测到这个,如果返回的值是一个错误的 Ptr。
我试过问它是否为NULL,没有运气。
我意识到结果是否是坏 Ptr 的唯一方法是在调试时,我尝试了一些不同的方法,但仍然无法做到。
最佳答案
不,没有简单的方法可以确定指针是否坏。
Windows 确实有 IsBadReadPtr、IsBadWritePtr。这些函数本质上是有缺陷的——它们只确定函数在调用时在地址空间中是否可读或可写。它们也可能是 security issues 的原因,不应使用。
主要问题是无法区分您的进程仍然可以访问的“坏”指针和好指针。
例如,
int g[5];
int somethingElse;
void* GetPointer()
{
return &g[5]; // Whoops, off by one.
}
&g[5] 可能是您进程中的有效指针,并且可能指向其他东西,您将能够访问它而不会崩溃,但写入它会破坏您的状态。
关于c++ - 如何将 LPVOID 验证为 <Bad Ptr>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/683059/