这可以按预期工作。提出new HtmlPolicyBuilder()
.allowCommonBlockElements()
.allowCommonInlineFormattingElements()
.allowStyling()
.allowStandardUrlProtocols()
.toFactory()
。
STATUS_GUARD_PAGE_VIOLATION
然而,当运行这个几乎完全相同的代码时,程序会毫无例外地退出。
int main()
{
DWORD oldp;
DWORD *pdp = new DWORD;
*pdp = 0;
if (!VirtualProtect(pdp, sizeof(DWORD), PAGE_READWRITE | PAGE_GUARD, &oldp))
return 1;
*pdp = 1000;
return 0;
}
两个程序int main()
{
DWORD oldp;
DWORD pd = 0;
DWORD *pdp = &pd;
if (!VirtualProtect(pdp, sizeof(DWORD), PAGE_READWRITE | PAGE_GUARD, &oldp))
return 1;
*pdp = 1000;
return 0;
}
,所以exited with code 0
正在成功完成。那么,为什么在第二个例子中,当我尝试访问受保护的内存时,没有引发异常?
修改
运行此操作会导致访问冲突;从而证明了Ton的假设。
VirtualProtect
答案 0 :(得分:7)
在第二个示例中,在应用程序堆栈使用的内存页面上设置PAGE_GUARD。在VirtuaProtect成功之后,对该页面的第一次访问将引发异常。第一次访问不是由'* pdp = 1000'代码完成的。可能这是VirtualProtect函数中已经完成的访问。如果它优雅地处理这个(特定的)异常,它将解释你看到的行为。