PAGE_NOACCESS 禁止寫入執行讀取
查看進程內存區域能發現,NOACCESS屬性的內存頁面都是FREE狀態的(未提交使用的內存區域),只有內存區域最后的0x7FFE1000-0x7FFF0000之間的60K內存區域狀態是Reserve。(保留了,不讓使用...)
PAGE_READONLY PAGE_READWRITE PAGE_EXECUTE 根據字面就很好理解
PAGE_WRITECOPY PAGE_EXCUTE_WRITECOPY 這2個頁面屬性是windows節省內存應用的一個機制.
難道要2個一樣的可執行程序同時運行時各占一個獨立4G的尋址空間么?既然是一樣的程序,2個程序的代碼段,數據段都是相同的。為了節省內存,windows就讓2個進程共享單個內存塊。
但是如果一個程序中的內存發生變化,另一個也同時發生變化,那豈不亂套了?開2個IE瀏覽網站,但是2個都顯示同樣的內容那還有什么意義?copy-on-write就是為解決這個問題而設置的。
PAGE_WRITECOPY 數據段
簡單的說,2個一樣的程序運行,如果內存中數據不發生變化,那么這段數據是共享的,如果其中一個程序的內存發生變化,比如記事本A寫了一行字,那么就會把記事本的這個數據段復制出來
一份放到新的內存區域讓記事本A單獨使用,這時候記事本A和記事本B進程的數據段就不再共享,而是各自用各自的。但是他們的代碼段還是共享。
PAGE_EXCUTE_WRITECOPY 代碼段
代碼段也是一樣,你用OD修改了A記事本中的代碼段,系統就會自動把A記事本的代碼段復制一份新的,不再和B共享,也就不會影響B記事本中的代碼段。
實際上一個程序的代碼段,資源段等數據也沒多大。所以,這種機制也看不太出來能節省很大的內存。
http://blog.csdn.net/mysouling/article/details/8676198