在得到这个答案的负面评论后 -我可以在 .text 区域中实现计数器而不使用寄存器吗?,我进行了一些调查,试图了解RWX内存页面是否真的是非常罕见的东西,或者每个流行的程序都有一些。(科学!)
我通过 WinDBG 附加到 MSVS,执行!address /f:Image,PAGE_EXECUTE_READWRITE
,
我看到很多这样的行:
7a534000 7a537000 3000 MEM_IMAGE MEM_COMMIT PAGE_EXECUTE_READWRITE Image "C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System\6836a951700c2eb01a933212425cda4e\System.ni.dll"
我检查了它的部分,并且有一个.xdata
带有“执行读写”标志的部分。
这是否意味着每个加载了 .NET 库的应用程序都有 RWX 内存页?
例如,您的浏览器(如果您运行 Windows)。(幸运的是,FF8 和 IE8 都不使用 .NET)
那么我们为什么要为 RWX 内存烦恼呢?