如果我要用C編寫一個程序並在Windows中運行它,Win API中是否有某些內容可以指示程序是否可以訪問某個內存塊?如果我希望能夠讓程序訪問我想要的任何內存塊,有什麼我必須禁用?我意識到這是有風險的,並可能導致操作系統受到損害。當在Windows中運行程序時,該程序允許的內存是什麼?
2
A
回答
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設備來說只有意義。其中已經有一個驅動程序保留地址空間。
相關問題
- 1. 爲什麼CASPol允許我的.NET應用程序運行?
- 2. 當iPhone被鎖定時允許應用程序繼續運行
- 3. 當程序響應緩慢時,該程序在做什麼?
- 4. 運行在內存中的Python程序
- 5. 什麼是Windows內核驅動程序?
- 6. 在Windows上運行cygwin中的C++程序的安裝後過程是什麼?
- 7. 在OS X上運行Haskell程序時不允許操作
- 8. 在Windows Vista中,線程調度程序運行的IRQL是什麼?
- 9. 當沒有足夠的內存在C中運行我的程序時該怎麼辦?
- 10. 當應用程序運行時允許用戶的音樂播放 - Cocos2d
- 11. 什麼是在運行時確定Windows Phone 8.1應用允許/可用多少內存的好方法?
- 12. 當程序運行時發生事件時會發生什麼
- 13. 如何啓用/允許Java在CefSharp應用程序中運行
- 14. 這個FizzBuzz程序中的運行時錯誤是什麼?
- 15. 這個程序中的運行時錯誤是什麼?
- 16. 運行程序在Windows啓動時
- 17. 當我運行我的程序時,爲什麼會出現NullPointerException?
- 18. 該程序爲什麼會導致運行時錯誤?
- 19. 在內存中運行時自行更新應用程序
- 20. Windows Cmd:輸入文件以運行程序的內容是什麼?
- 21. 爲什麼分塊傳輸編碼不允許在CloudBees運行@雲中運行的Web應用程序?
- 22. 只允許一個程序正在運行的實例
- 23. shell_exec |允許特定的程序在Apache用戶下運行
- 24. 允許用戶在線運行我的JAR預訂程序
- 25. 爲什麼在使用多線程時該程序不會運行得更快?
- 26. iPad應用程序允許的最大運行時間內存大小是多少?
- 27. 運行Windows的Java程序
- 28. 什麼是在Mac App Store中允許連續運行的應用程序的標準方法
- 29. 設置一個程序在Windows啓動時從程序內運行
- 30. 爲什麼我的OGL程序無法在WIndows 8上運行?
不,只是寫一個驅動程序,運行在環級別0 ...並粉碎操作系統,你希望,在你的方式.... – perilbrain