我正在使用 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/

10-11 15:29