2012-09-03 39 views
2

如果我要用C編寫一個程序並在Windows中運行它,Win API中是否有某些內容可以指示程序是否可以訪問某個內存塊?如果我希望能夠讓程序訪問我想要的任何內存塊,有什麼我必須禁用?我意識到這是有風險的,並可能導致操作系統受到損害。當在Windows中運行程序時,該程序允許的內存是什麼?

+1

不,只是寫一個驅動程序,運行在環級別0 ...並粉碎操作系統,你希望,在你的方式.... – perilbrain

回答

1

在現代Windows(具有NT內核的Windows)中,操作系統控制着內存的訪問方式。所以,答案是:NO。你無能爲力。您將無法讓您的流程訪問您想要的任何內存塊ANY

你可以在Win 3.0,Win 3.11,Win 95,Win 98,Win ME中完成它。

0

你不能/不會/不能訪問內核內存。除內核模式外,現代操作系統不允許從這些內存區域進行分配。

1

是的,VirtualAlloc()是可能的,VirtualAlloc()是分配虛擬內存頁的低級函數。 flProtect參數指定進程如何訪問內存,指定PAGE_NOACCESS是可能的,儘管它並不經常使用。

如果您實際上正在談論RAM那麼否,用戶模式程序永遠不會直接訪問保護模式操作系統(如Windows)上的物理內存。它只能處理虛擬內存,映射到RAM由OS內核執行。只有環0中運行的代碼才具有這種能力。拒絕訪問某些物理地址對於內存映射I/O設備來說只有意義。其中已經有一個驅動程序保留地址空間。

相關問題