我正在使用vmmap for windows查看不同应用程序的私有数据。我发现许多应用程序都将私有数据标记为可执行文件。我还发现来自非分页内核池的动态分配页面也是可执行的。 Windows如何允许从数据页执行代码。或者有一些特殊情况需要这样做。
由于
答案 0 :(得分:2)
任何动态生成的代码都必须存在于可执行页面中。
这很常见。例如,任何.Net应用程序,Java应用程序或Web浏览器都将有大量的JITted代码; ATL代码使用动态生成的trampolines进行窗口过程;任何重定向API的应用程序(例如使用Detours)都会为重定向的函数创建蹦床。
我不知道内核在做什么,但也许(比如ATL)它使用trampolines来获取性能关键代码以避免表查找。
答案 1 :(得分:1)
如果您的代码已在内核模式下运行,则禁用某些页面的执行在某种程度上是有用的。您的内核模式代码总是可以破解内核或直接操作页表并执行任何操作。
因此,禁用执行可以帮助捕获一些错误,但它无助于安全性(您已经在)或可靠性(内核模式页面错误触发BSOD)。也许由于这些原因,内核中的任何地方都不会强制执行禁用。