我知道每個用戶進程都有一個虛擬地址空間,並且可以被轉儲。但有沒有辦法轉儲物理地址空間?假設我有32位系統和4GB內存,我可以編寫一個程序來打印每個物理內存位置。有沒有辦法轉儲所有的物理內存值?
我知道它違反了內存保護等,但如果它可能如何將其轉換爲內核進程或更低級別的進程,讓我訪問整個內存..?
我想知道如何在Windows/Linux平臺(或內核)上編寫這樣的代碼(如果可能的話)。或者如果我要使用Assembly或類似的東西,如何切換到該特權水平。
我知道每個用戶進程都有一個虛擬地址空間,並且可以被轉儲。但有沒有辦法轉儲物理地址空間?假設我有32位系統和4GB內存,我可以編寫一個程序來打印每個物理內存位置。有沒有辦法轉儲所有的物理內存值?
我知道它違反了內存保護等,但如果它可能如何將其轉換爲內核進程或更低級別的進程,讓我訪問整個內存..?
我想知道如何在Windows/Linux平臺(或內核)上編寫這樣的代碼(如果可能的話)。或者如果我要使用Assembly或類似的東西,如何切換到該特權水平。
can i write a program to print each physical memory location.
我覺得沒有操作系統提供了物理內存位置的用戶訪問。所以,你不能。什麼,你看到的是由操作系統產生的虛擬地址。
在Windows上,可以直接訪問物理內存。您可以執行的一些操作:
以上這些方法都不會讓您輕鬆訪問任何物理內存位置,也可以不受限制地訪問任何物理內存位置。 如果我可能會問,你想完成什麼?
我在想你或許可以用kernel mode driver這樣做,但是結果會很糟糕,因爲當你抓住它的時候,內存的用戶部分會出現什麼內容,這可能是操作系統已經調入的內容一個應用程序的一部分或一大堆混雜的混合物。以前的SO問題也可能有所幫助:How does a Windows Kernel mode Driver, access paged memory ?
在Linux中,您可以打開並映射設備文件/dev/mem
(如果您有讀取權限)。這對應於物理內存。
試試這個NTMIO - Windows命令行來訪問硬件資源http://siliconkit.com/ocart/index.php?route=product/product&keyword=ntmio&category_id=0&product_id=285
你也許可以(我個人從來沒有嘗試過),但它需要至少一些OS調用。用戶進程無權訪問物理內存。如果在代碼中沒有一種已知的方式來執行此操作,則可能會導致操作系統崩潰並以此方式獲取內存轉儲。 – 2011-02-07 07:52:07