这是isBadWritePtr()的一个很好的替代品吗?

时间:2017-03-31 06:06:31

标签: c++ visual-studio memory-management heap-memory heap-corruption

我在@constm中看到下面的代码回答了这个问题,

Most efficient replacement for IsBadReadPtr?

bool IsBadReadPtr(void* p)
{
MEMORY_BASIC_INFORMATION mbi = {0};
if (::VirtualQuery(p, &mbi, sizeof(mbi)))
{
    DWORD mask = (PAGE_READONLY|PAGE_READWRITE|PAGE_WRITECOPY|PAGE_EXECUTE_READ|PAGE_EXECUTE_READWRITE|PAGE_EXECUTE_WRITECOPY);
    bool b = !(mbi.Protect & mask);
    // check the page is not a guard page
    if (mbi.Protect & (PAGE_GUARD|PAGE_NOACCESS)) b = true;

    return b;
}
return true;
}

我在Visual Studio 2013中使用Windows和编码。代码看起来很好,我可以看到它将克服isBadReadPtr访问页面保护的问题,但我想了解它会如何克服了多线程的问题?

此代码是isBadReadPtr的良好替代品吗?同样看起来这段代码应该返回false让我理解我传递的ptr是有效的。

另外,如果我传递一个类的对象,它如何知道对象的大小并检查整个空间?也许我不太了解VirtualQuery。

如果我理解的是正确的,请告诉我。

TIA!

0 个答案:

没有答案