如果Windows 2012 R2服務器上運行的每個進程都有自己的堆,那麼是不是有可能讓一個進程損壞了另一個進程的堆?我認爲這是可能的,因爲所有堆都存儲在「全局」地址空間中,但是當一個進程嘗試從其地址空間外的內存中寫入或從內存中讀取時發生AV,這樣可以防止堆進程損壞擁有地址空間?堆損壞對Windows 2012 R2服務器的影響
-2
A
回答
2
您需要詳細瞭解virtual memory的工作原理。沒有包羅萬象的地址空間。
有物理RAM地址和物理磁盤地址,它們不因進程而異。但用戶模式代碼從不直接使用這些代碼。
而是,內存管理單元提供從虛擬地址到物理地址的映射。由於頁表是特定於進程的,因此該映射對每個進程都是唯一的。只有環0(內核模式)代碼可以繞過映射步驟,這是在硬件中強制執行的。對於用戶進程,如果沒有映射導致特定的物理地址,則無法從該上下文訪問,因爲無法使用虛擬地址命名該物理位置。並沒有導致頁表本身的映射。
這是內存管理單元和其較小的兄弟內存保護單元之間的區別。使用內存保護單元的體系結構確實有一個全局尋址機制,硬件強制允許位只能通過特權代碼進行修改。
你問的事情有關
一個進程試圖從[原文]寫入或從存儲器中讀取外面的(原文如此)地址空間
根本就不存在。這就像問我的車的電話號碼是什麼。我的車由VIN和車牌識別,但這兩者都不允許您通過電話系統與其通話。
當進程嘗試從自己的地址空間的未映射部分寫入,讀取或執行,或者顯式設置爲陷阱訪問嘗試的頁面時,會發生訪問衝突(有時也稱爲段錯誤)(對於堆棧可能擴展,或者寫時複製)。一個進程的所有內存訪問都是在其地址空間內定義的。
相關問題
- 1. Azure與Windows服務器2012 r2
- 2. IIS託管在Windows服務器2012 r2
- 3. 服務器2012 r2和mysql
- 4. 意外的Windows服務器2012 R2上的WCF服務崩潰
- 5. installshield 2012 LE和Windows服務的Windows 2008 R2的64位VS.NEt 2012
- 6. PHP不寫文本到txt文件的Windows服務器2012 R2
- 7. Windows 2012 R2服務器上的Informix HDR實施
- 8. AX 2012 R2 CU7:AIF服務器設置
- 9. E_OUTOFMEMORY,堆損壞
- 10. 堆棧損壞
- 11. Windows 2012 R2 FTP服務器IIS 8被動模式不工作
- 12. 在Windows服務器2012 R2中啓用密碼
- 13. Windows Server 2012 R2 - System.IO.FileNotFoundException
- 14. Filebeat在Windows 2012 R2
- 15. Python堆棧損壞?
- 16. 堆內存損壞
- 17. 堆棧被損壞
- 18. 自由堆損壞(...)
- 19. 堆棧被損壞
- 20. IIS 8在Windows Server 2012上遭到損壞
- 21. Crystal Reports的Windows服務器2008年到Windows服務器2012 R2引發與.NET 2.0的登錄錯誤
- 22. Windows損壞後,損壞的Linux安裝
- 23. GWT服務器上傳文件損壞
- 24. Windows 2012 R2 cmdlet未在Windows 2012 R2上運行
- 25. C++ - UInt32上的堆損壞*
- 26. C中的堆損壞
- 27. c中的堆棧損壞
- 28. Qt的堆內存損壞
- 29. 堆棧上的值損壞
- 30. 多線程和堆損壞
一個進程永遠不會意外地損壞另一個進程的內存。對於[Windows NT](https://en.wikipedia.org/wiki/Windows_NT)系列中的每個Windows版本都是如此。近25年,現在。 – IInspectable