2011-04-15 36 views
12

這可能是一個重複的問題。我想知道Windows進程的內存映射是怎樣的?我在尋找細節。請提供指向博客,文章和其他相關文獻的鏈接。Windows進程的內存映射是怎樣的?

+3

Windows內部本書是這樣一個很好的信息來源。您也可以使用VMMap查看特定流程的佈局。 – Luke 2011-04-15 19:53:35

+0

@Luke這是一個很好的建議(VMMap),你應該把它放在答案中。它給你一個很好的地址空間顏色編碼表示。 Windows內部也是一個很好的建議。 – 2011-04-15 20:22:27

回答

8

我總是喜歡居然能看到的東西,而不僅僅是閱讀理論。根據this blog post,事實證明,如果你使用windbg打開一個程序,即使它沒有運行,它仍然被映射到一個地址空間,就好像它一樣。因此,你的反彙編窗口形象(不保證這些確切的地址加載代碼)向您顯示這些地址在代碼方面:

WinDbg working

當然,你不能保證這些地址謝謝到ASLR,但它給了你一個想法/讓你思考:內存地址也只是代碼。代碼和內存存儲在相同(虛擬)空間中,按照大多數現代計算機實現的Von Neumann體系結構。不幸的是,因爲沒有堆棧,堆等,你不能移動,看看那些。

blog post from Microsoft爲您提供了虛擬地址空間的高度概括。正如你所看到的,其中一半保留給操作系統使用,另一半則可以填滿你擁有的任何東西(代碼:malloc調用,堆棧分配等)。

在地址空間是如何工作的在用戶端方面,this diagram幫助我理解它。它鏈接到in this question,它提供了一系列不同的可能的地圖鏈接。請記住,內存中的佈局會因部件而異。

要記住的重要一點是,這一切,程序,數據,堆棧,堆,內核的東西,是一個很大的一系列連續的內存地址,儘管這些可能會或可能不會真正轉化爲實際的內存地址。

雖然你在它,你可能也有興趣在如何執行上出現磁盤。 This articlethis article particularly提供了一些PE文件格式的深入分析。後面的文章也有一個小圖,大致顯示了數據是如何映射的。