gpt4 book ai didi

winapi - Windows 堆栈保护页面未在 _chkstk 中触发

转载 作者:行者123 更新时间:2023-12-01 23:07:37 24 4
gpt4 key购买 nike

我在“野外”看到了一些崩溃,其中崩溃转储显示代码在尝试扩展堆栈时在 _chkstk 内部抛出访问冲突。 Windbg 显示 _chkstk 正在接触保护页,但它并没有按预期扩展堆栈,而是引发了访问冲突。

我怀疑这可能是由于代码中的用户模式结构化异常处理程序造成的,但我的测试表明,在正常情况下,_chkstk 保护页面异常发生在内核模式中,甚至从未到达用户模式异常处理程序。

因此在这种情况下,看起来内核模式保护页面异常由于某种原因没有得到处理,而是触发了用户模式访问冲突。

什么会导致这种情况发生?

最佳答案

事实证明这是一个 XP/Server 2003 内核特定问题。在这些操作系统上,如果一个线程读取另一个线程堆栈,那么保护页面和 TIB 状态就会变得困惑,并且任何后续尝试增加堆栈 (_chkstk) 都会导致访问冲突。这不会发生在更高版本的操作系统上。

在我们的例子中,我们正在编写一个包含线程堆栈的进程内小型转储,这会破坏堆栈状态,如 dbghelp 库读取每个线程堆栈时所描述的那样。

故事的寓意是生成进程内小型转储是不安全的,它们应该始终由外部进程生成。

关于winapi - Windows 堆栈保护页面未在 _chkstk 中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26708419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com