共用方式為


使用者空間和系統空間

Windows 會為每個使用者模式應用程式提供虛擬位址區塊。 這稱為該應用程式 的使用者空間 。 應用程式無法直接存取另一個大型位址區塊,稱為 系統空間核心空間

當 WinDbg 或 CDB 在使用者空間中設定 中斷點 時,此中斷點會在單一進程的使用者空間中指定的位址設定。 在使用者模式偵錯期間,目前的進程會決定虛擬位址的意義。 如需詳細資訊,請參閱 控制進程和執行緒

在核心模式中,您可以使用 bpbuba 命令或在 [中斷點] 對話方塊中,在使用者空間中設定 中斷點 。 您必須先使用 進程內容 來指定擁有該位址空間的使用者模式進程,方法是使用 .process /i (或某些核心空間函式上的進程特定中斷點,) 將目標切換至正確的 進程內容

使用者空間中的中斷點一律會與設定中斷點時進程內容作用中的進程相關聯。 如果使用者模式偵錯工具正在偵錯此進程,而且核心偵錯工具正在偵錯進程執行所在的電腦,此中斷點會中斷為使用者模式偵錯工具,即使實際上已從核心偵錯工具設定中斷點也一樣。 此時,您可以從核心偵錯工具中斷系統,或使用 .breakin (Break to the Kernel Debugger) 命令,將控制權傳送至核心偵錯工具。

判斷使用者空間和系統空間的範圍

如果您需要判斷目的電腦上的使用者空間和系統空間範圍,您可以從核心偵錯工具使用 dp (Display Memory) 命令來顯示 Windows 全域變數 MmHighestUserAddress。 此變數包含使用者空間頂端的位址。 由於系統空間位址一律高於使用者空間位址,因此此值可讓您判斷任何指定的位址是否位於使用者空間或核心空間中。

例如,在具有 x86 處理器和標準開機參數的 32 位目的電腦上,此命令會顯示下列結果:

kd> dp nt!mmhighestuseraddress L1 
81f71864  7ffeffff 

這表示使用者空間的範圍是從位址0x00000000到0x7FFEFFFF,因此系統空間的範圍從0x80000000到最高可能的位址 (,這是標準 32 位 Windows 安裝) 上的0xFFFFFFFF。

使用 64 位目的電腦時,將會發生不同的值。 例如,此命令可能會顯示下列內容:

0: kd> dp nt!mmhighestuseraddress L1 
fffff800`038b4010  000007ff`fffeffff 

這表示使用者空間的範圍從 0x00000000'00000000 到 0x000007FF'FFFEFFFF。 因此,系統空間包含從0x00000800'00000000 向上的所有位址。

如需 Windows 記憶體管理的詳細資訊,請參閱 Microsoft Windows Internals by David 一文和 Mark Russinovich (第 4 版、Microsoft Press、2005) 。