Intel architecture ia-32 Manuale Utente

Pagina di 636
Vol. 3A
v
CONTENTS
PAGE
CHAPTER 4
PROTECTION
4.1
ENABLING AND DISABLING SEGMENT AND PAGE PROTECTION . . . . . . . . . .  4-1
4.2
FIELDS AND FLAGS USED FOR SEGMENT-LEVEL AND 
PAGE-LEVEL PROTECTION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-2
4.2.1
Code Segment Descriptor in 64-bit Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-4
4.3
LIMIT CHECKING  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-5
4.3.1
Limit Checking in 64-bit Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-6
4.4
TYPE CHECKING  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-6
4.4.1
Null Segment Selector Checking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-8
4.4.1.1
NULL Segment Checking in 64-bit Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-8
4.5
PRIVILEGE LEVELS  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-8
4.6
PRIVILEGE LEVEL CHECKING WHEN ACCESSING DATA SEGMENTS. . . . . .  4-11
4.6.1
Accessing Data in Code Segments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-13
4.7
PRIVILEGE LEVEL CHECKING WHEN LOADING THE SS REGISTER  . . . . . . .  4-13
4.8
PRIVILEGE LEVEL CHECKING WHEN TRANSFERRING PROGRAM 
CONTROL BETWEEN CODE SEGMENTS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-13
4.8.1
Direct Calls or Jumps to Code Segments  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-14
4.8.1.1
Accessing Nonconforming Code Segments . . . . . . . . . . . . . . . . . . . . . . . . .  4-15
4.8.1.2
Accessing Conforming Code Segments . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-16
4.8.2
Gate Descriptors  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-17
4.8.3
Call Gates  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-18
4.8.3.1
IA-32e Mode Call Gates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-19
4.8.4
Accessing a Code Segment Through a Call Gate . . . . . . . . . . . . . . . . . . . . . . .  4-20
4.8.5
Stack Switching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-23
4.8.5.1
Stack Switching in 64-bit Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-26
4.8.6
Returning from a Called Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-26
4.8.7
Performing Fast Calls to System Procedures with the
SYSENTER and SYSEXIT Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-28
4.8.7.1
SYSENTER and SYSEXIT Instructions in IA-32e Mode. . . . . . . . . . . . . . . .  4-29
4.8.8
Fast System Calls in 64-bit Mode  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-30
4.9
PRIVILEGED INSTRUCTIONS  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-32
4.10
POINTER VALIDATION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-32
4.10.1
Checking Access Rights (LAR Instruction)  . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-33
4.10.2
Checking Read/Write Rights (VERR and VERW Instructions)  . . . . . . . . . . . . .  4-34
4.10.3
Checking That the Pointer Offset Is Within Limits (LSL Instruction)  . . . . . . . . .  4-34
4.10.4
Checking Caller Access Privileges (ARPL Instruction)  . . . . . . . . . . . . . . . . . . .  4-35
4.10.5
Checking Alignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-37
4.11
PAGE-LEVEL PROTECTION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-37
4.11.1
Page-Protection Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-38
4.11.2
Restricting Addressable Domain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-38
4.11.3
Page Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-38
4.11.4
Combining Protection of Both Levels of Page Tables . . . . . . . . . . . . . . . . . . . .  4-39
4.11.5
Overrides to Page Protection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-39
4.12
COMBINING PAGE AND SEGMENT PROTECTION  . . . . . . . . . . . . . . . . . . . . . .  4-39
4.13
PAGE-LEVEL PROTECTION AND EXECUTE-DISABLE BIT . . . . . . . . . . . . . . . .  4-40
4.13.1
Detecting and Enabling the Execute-Disable Bit Capability. . . . . . . . . . . . . . . .  4-41
4.13.2
Execute-Disable Bit Page Protection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-41
4.13.3
Reserved Bit Checking  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-43
4.13.4
Exception Handling  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4-44