這可能是一個重複的問題。我想知道Windows進程的內存映射是怎樣的?我在尋找細節。請提供指向博客,文章和其他相關文獻的鏈接。Windows進程的內存映射是怎樣的?
12
A
回答
8
我總是喜歡居然能看到的東西,而不僅僅是閱讀理論。根據this blog post,事實證明,如果你使用windbg打開一個程序,即使它沒有運行,它仍然被映射到一個地址空間,就好像它一樣。因此,你的反彙編窗口形象(不保證這些確切的地址加載代碼)向您顯示這些地址在代碼方面:
當然,你不能保證這些地址謝謝到ASLR,但它給了你一個想法/讓你思考:內存地址也只是代碼。代碼和內存存儲在相同(虛擬)空間中,按照大多數現代計算機實現的Von Neumann體系結構。不幸的是,因爲沒有堆棧,堆等,你不能移動,看看那些。
這blog post from Microsoft爲您提供了虛擬地址空間的高度概括。正如你所看到的,其中一半保留給操作系統使用,另一半則可以填滿你擁有的任何東西(代碼:malloc
調用,堆棧分配等)。
在地址空間是如何工作的在用戶端方面,this diagram幫助我理解它。它鏈接到in this question,它提供了一系列不同的可能的地圖鏈接。請記住,內存中的佈局會因部件而異。
要記住的重要一點是,這一切,程序,數據,堆棧,堆,內核的東西,是一個很大的一系列連續的內存地址,儘管這些可能會或可能不會真正轉化爲實際的內存地址。
雖然你在它,你可能也有興趣在如何執行上出現磁盤。 This article和this article particularly提供了一些PE文件格式的深入分析。後面的文章也有一個小圖,大致顯示了數據是如何映射的。
相關問題
- 1. Windows內存映射文件
- 2. 設備的內存映射IO地址(es)是否映射到進程的內核空間?
- 3. 內存映射,文件在Windows
- 4. 用戶進程內存映射 - 是BSS部分總是相同的大小?
- 5. RTOS的內存映射
- 6. GDB:列出崩潰進程的所有映射內存區域
- 7. 什麼是查看過程內存映射的最佳程序?
- 8. 內存映射UIImage
- 9. 進程間映射與映射/ unordered_map
- 10. 內存映射文件 - 映射結構而不是文件?
- 11. 緩存到內存的映射
- 12. 將內存地址映射到Windows XP中的物理模塊
- 13. 縮進映射內的YAML序列
- 14. 內存映射文件C++
- 15. GPU - 系統內存映射
- 16. 內存映射文件.NET
- 17. Erlang - 將每個「erlang進程」映射到新的內核線程
- 18. 怎樣才能使四路組相關緩存映射接近直接映射的命中時間?
- 19. 帶父親和子女進程的內存映射文件的問題
- 20. 檢索在OS自己的進程的內存映射X 10.5/10.6
- 21. boost :: posix_time :: ptime是否安全地存儲在Windows共享內存映射中?
- 22. 這個程序關於內存分配的確切流程是怎樣的?
- 23. 內存映射文件的使用
- 24. C++:內存映射文件上的Fetch_add
- 25. 內存映射庫的文件名osx
- 26. 內存映射的IO概念細節
- 27. 哈希映射的內存分配
- 28. 內存映射文件的位置
- 29. numpy數組的內存映射文件
- 30. 共享內存中的C++ STL映射
Windows內部本書是這樣一個很好的信息來源。您也可以使用VMMap查看特定流程的佈局。 – Luke 2011-04-15 19:53:35
@Luke這是一個很好的建議(VMMap),你應該把它放在答案中。它給你一個很好的地址空間顏色編碼表示。 Windows內部也是一個很好的建議。 – 2011-04-15 20:22:27