为什么私有数据是可执行的



我使用vmmap for windows查看了不同应用程序的私有数据。我发现很多应用程序都有被标记为可执行的私人数据。我还发现,从内核的非分页池中动态分配的页面也是可执行的。How come windows允许从数据页执行代码。或者在某些特定情况下需要这样做。

感谢

任何动态生成的代码都必须存在于可执行页面中。

这很常见。例如,任何.Net应用程序、Java应用程序或web浏览器都会有大量的JITted代码;ATL代码将动态生成的蹦床用于窗口过程;任何重定向API的应用程序(例如使用Detours)都会为重定向的功能创建蹦床。

我不知道内核在做什么,但也许(像ATL一样)它使用蹦床作为性能关键代码,以避免表查找。

如果您的代码已经在内核模式下运行,那么禁用某些页面的执行在某种程度上是有用的。您的内核模式代码总是可以破解内核或直接操作页表,并且几乎可以做任何事情。

因此,禁用执行可以帮助捕获一些错误,但对安全性(您已经处于其中)或可靠性(内核模式页面故障触发BSOD)没有帮助。也许是由于这些原因,内核中并没有处处强制执行禁用。

相关内容

  • 没有找到相关文章

最新更新