在NT中直接訪問物理記憶體

2021-05-25 15:04:57 字數 478 閱讀 6294

我們知道,在nt/2k/xp中,作業系統利用虛擬記憶體管理技術來維護位址空間映像,每個程序分配乙個4gb的虛擬位址空間。執行在使用者態的應用程式,不能直接訪問物理記憶體位址;而執行在核心態的驅動程式,能將虛擬位址空間對映為實體地址空間,從而訪問物理記憶體位址。

如果要在應用程式中以實體地址方式訪問記憶體,自然而然的辦法,是編寫乙個專用的驅動程式(如大家熟悉的winio),裡面設定一定的ioctl碼,應用程式通過呼叫deviceioctrol()來實現這樣的功能。

那麼,有沒有一種方法,省去編寫專用驅動程式這一步,很方便地就能訪問物理記憶體呢?答案是肯定的。實際上,微軟早就給我們準備好了一套辦法,只是他們秘而不宣罷了。系統內建乙個叫做physicalmemory的核心物件,可以通過系統核心檔案ntdll.dll中的有關api進行操縱,從而實現物理記憶體的直接訪問。微軟聲稱這些api是用於驅動程式開發的,在vc/.net中未提供原型說明和庫檔案,然而事實證明在應用程式中呼叫它們是沒有問題的。我們感興趣的api主要包括:

在NT中直接訪問物理記憶體

我們知道,在nt 2k xp中,作業系統利用虛擬記憶體管理技術來維護位址空間映像,每個程序分配乙個4gb的虛擬位址空間。執行在使用者態的應用程式,不能直接訪問物理記憶體位址 而執行在核心態的驅動程式,能將虛擬位址空間對映為實體地址空間,從而訪問物理記憶體位址。如果要在應用程式中以實體地址方式訪問記憶...

C 中直接訪問類私有成員 360度

本文談到的問題是,在c 中究竟有沒有辦法訪問類的私有成員,以及如何實現。主要針對菜鳥,老鳥們就不要看了。讀到 c 程式設計思想 48頁,3.4 物件布局 一節時,看到這樣一段話 訪問指定符是struct的一部分,他並不影響這個struct產生的物件,程式開始執行時,所有的訪問指定資訊都消失了。訪問指...

Objective C 屬性訪問or直接訪問?

當定義了乙個屬性的時候,例如 property nonatomic,strong uiimageview imageview 有兩種訪問方法self.imageview imageview,屬性訪問和直接訪問有幾個區別 1直接訪問不用經過 方法派發 速度上有一定的優勢 2直接訪問,繞過了 記憶體管理...