日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

2 《Undocumented Windows 2000 Secrets》翻譯 --- 第四章( 二 )


譯注:
列表 4-2 中的這些結(jié)構(gòu)定義可以在隨書光盤的 srccommonincludew2k_spy.h 中找到 。
typedef DWORD X86_REGISTER, *PX86_REGISTER, **PPX86_REGISTER;
// -----------------------------------------------------------------
typedef struct _X86_SELECTOR
{
union
{
struct
{
WORD wValue; // packed value
WORD wReserved;
};
struct
{
unsigned RPL : 2; // requested privilege level
unsigned TI : 1; // table indicator: 0=gdt, 1=ldt
unsigned Index : 13; // index into descriptor table
unsigned Reserved : 16;
};
};
}
X86_SELECTOR, *PX86_SELECTOR, **PPX86_SELECTOR;
#define X86_SELECTOR_ sizeof (X86_SELECTOR)
// -----------------------------------------------------------------
typedef struct _X86_DESCRIPTOR
{
union
{
struct
{
DWORD dValueLow; // packed value
DWORD dValueHigh;
};
struct
{
unsigned Limit1 : 16; // bits 15..00
unsigned Base1 : 16; // bits 15..00
unsigned Base2 : 8; // bits 23..16
unsigned Type : 4; // segment type
unsigned S : 1; // type (0=system, 1=code/data)
unsigned DPL : 2; // descriptor privilege level
unsigned P : 1; // segment present
unsigned Limit2 : 4; // bits 19..16
unsigned AVL : 1; // available to programmer
unsigned Reserved : 1;
unsigned DB : 1; // 0=16-bit, 1=32-bit
unsigned G : 1; // granularity (1=4KB)
unsigned Base3 : 8; // bits 31..24
};
};
}
X86_DESCRIPTOR, *PX86_DESCRIPTOR, **PPX86_DESCRIPTOR;
#define X86_DESCRIPTOR_ sizeof (X86_DESCRIPTOR)
// -----------------------------------------------------------------
typedef struct _X86_GATE
{
union
{
struct
{
DWORD dValueLow; // packed value
DWORD dValueHigh;
};
struct
{
unsigned Offset1 : 16; // bits 15..00
unsigned Selector : 16; // segment selector
unsigned Parameters : 5; // parameters
unsigned Reserved : 3;
unsigned Type : 4; // gate type and size
unsigned S : 1; // always 0
unsigned DPL : 2; // descriptor privilege level
unsigned P : 1; // segment present
unsigned Offset2 : 16; // bits 31..16
};
};
}
X86_GATE, *PX86_GATE, **PPX86_GATE;
#define X86_GATE_ sizeof (X86_GATE)
// -----------------------------------------------------------------
typedef struct _X86_TABLE
{
WORD wReserved; // force 32-bit alignment
WORD wLimit; // table limit
union
{
PX86_DESCRIPTOR pDescriptors; // used by sgdt instruction
PX86_GATE pGates; // used by sidt instruction
};
}
X86_TABLE, *PX86_TABLE, **PPX86_TABLE;
#define X86_TABLE_ sizeof (X86_TABLE)
列表 4-2. i386 的寄存器、選擇器、描述符、門和表
接下來(lái)的一組與 i386 內(nèi)存管理相關(guān)的結(jié)構(gòu),它們收錄在 列表 4-3 中,這些結(jié)構(gòu)包括:與請(qǐng)求式分頁(yè)相關(guān)的結(jié)構(gòu)和 圖 4-3 和 圖 4-4 給出的幾個(gè)成員 。
l X86_PDBR 該結(jié)構(gòu)對(duì)應(yīng) CPU 的 CR3 寄存器,即眾所周知的頁(yè)目錄基地址寄存器( PDBR ) 。其高 20 位為 PFN,即 4KB 物理頁(yè)數(shù)組的索引 。PFN=0 對(duì)應(yīng)物理地址 0x00000000,PFN=1 為 0x00001000,依此類推 。20 個(gè)位足夠轉(zhuǎn)換整個(gè) 4GB 地址空間 。PDBR 中的 PFN 是物理頁(yè)的索引,用來(lái)控制整個(gè)頁(yè)目錄 。PFN 中剩余的位大多數(shù)都被保留,但 3 號(hào)位例外,它用來(lái)控制頁(yè)一級(jí)的 write-through ( page-level write-through, PWT ),4 號(hào)位如果為 1,則禁止頁(yè)一級(jí)的高速緩沖 。
l X86_PDE_4M 和 X86_PDE_4K 是頁(yè)目錄項(xiàng)( PDE )的兩個(gè)可選方案,用來(lái)選擇 4MB 頁(yè)或者 4KB 的頁(yè) 。一個(gè)頁(yè)目錄中最多包含 1024 個(gè) PDE。PFN 是頁(yè)幀號(hào),它指向下一級(jí)的頁(yè) 。對(duì)于一個(gè) 4MB 的 PDE,其 PFN 位域僅有 10 個(gè)位的寬度,可尋址一個(gè) 4MB 的數(shù)據(jù)頁(yè) 。4KB 的 PDE 擁有 20 位的 PFN,可指向一個(gè)頁(yè)表,由頁(yè)表最終選擇一個(gè)數(shù)據(jù)頁(yè) 。剩余的位用來(lái)定義多種屬性 。這些屬性中最有趣的是“頁(yè)大小”位 PS,用于控制頁(yè)的大小( 0=4KB,1=4MB )和“存在”位 P,標(biāo)識(shí)下屬的數(shù)據(jù)頁(yè)( 4MB 模式)或頁(yè)表( 4KB 模式)是否存在于物理內(nèi)存中 。

推薦閱讀