簡體   English   中英

有沒有辦法轉儲所有物理內存值?

[英]Is there a way to dump all the physical memory value?

我了解每個用戶進程都被賦予了虛擬地址空間,並且可以將其轉儲。 但是有沒有辦法轉儲物理地址空間? 假設我有一個具有4GB內存的32位系統,是否可以編寫一個程序來打印每個物理內存位置。

我知道它違反了內存保護等。但是,如果可能的話,如何將其轉換為內核進程或更低級別的進程,以允許我訪問整個內存。

我想知道如何在Windows / Linux平台(或內核)上編寫這樣的代碼(如果可能的話)。或者如果我必須使用Assembly或類似的東西,如何轉換到該特權級別。

在Linux中,您可以打開並映射設備文件/dev/mem (如果您具有讀取權限)。 這對應於物理內存。

can i write a program to print each physical memory location.

我認為沒有操作系統可以使用戶訪問物理內存位置。 所以,你不能。 您所看到的都是操作系統生成的虛擬地址。

在Windows上,可以直接訪問物理內存。 您可以做的一些事情:

  • 使用Device \\ PhysicalMemory對象-您無法訪問所有物理內存,並且從Windows Server 2003 SP1開始,對其的用戶模式訪問受到限制。
  • 使用地址窗口擴展-您可以控制自己的虛擬到物理地址映射,從某種意義上說,盡管仍然通過頁表,您還是可以直接訪問物理內存。
  • 編寫內核模式驅動程序-有內核模式API可直接訪問物理內存,分配物理內存頁面等。其原因之一是DMA(直接內存訪問)。

這些方法都不能使您輕松,不受限制地訪問任何物理內存位置。 如果我要問的話,您想完成什么?

我在想您可能可以使用內核模式驅動程序來完成此操作 ,但是結果將變得亂七八糟,因為在您抓取時RAM用戶部分中的內容將是操作系統已分頁的內容,它可能是一個應用程序或一堆雜燴。 前面的SO問題也可能會有所幫助: Windows內核模式驅動程序如何訪問分頁內存?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM