堆损坏对 Windows 2012 r2 服务器的影响

Heap Corruption's effect on a Windows 2012 r2 server

本文关键字:服务器 影响 r2 2012 损坏 Windows      更新时间:2023-10-16

如果在Windows 2012 R2服务器上运行的每个进程都有自己的堆,那么是否不可能让一个进程损坏另一个进程'heap?我认为这是可能的,因为所有堆都存储在"全局"地址空间中,但是当一个过程试图从内存中写入或从内存中读取其地址空间时,就会发生AV ...因此,这将阻止该过程的堆损坏拥有地址空间?

您需要阅读虚拟内存的工作方式。没有无所不包的地址空间。

有物理公羊地址和物理磁盘地址,这些地址不会因过程而异。但是用户模式代码永远不会直接使用这些代码。

相反,内存管理单元提供了从虚拟地址到物理地址的映射。由于页面表是特定于过程的,因此此映射是每个过程唯一的。只有环0(内核模式(代码可以绕过映射步骤,这是在硬件中执行的。对于用户流程,如果没有导致特定物理地址的映射,则根本无法从该上下文中访问它,因为没有办法使用虚拟地址来命名该物理位置。而且没有映射会导致页面表本身。

这是内存管理单元与其小兄弟(内存保护单元(之间的区别。使用内存保护单元的体系结构确实具有单个全局地址方案,硬件强制许可位只能通过特权代码进行修改。

您问的关于

的事情

一个过程试图从[sic]写作或从内存中读取它是[sic]地址空间

只是不存在。这就像问我的车电话是什么。我的汽车是通过VIN和车牌识别的,但是这些都不会让您通过电话系统与它进行交谈。

访问违规行为(有时也称为分割故障(发生在一个过程尝试写入,从其地址空间的未启动部分或已明确设置以捕获访问尝试的页面(用于堆栈扩展(时,就会发生。也许,或抄写的复制(。根据一个过程,所有内存访问均在其地址空间内解释。