본문 바로가기
컴퓨터 과학(Computer Science)/운영체제(Operating System)

[9주 차] - Segmentation and Paging in x86 CPU Structure LAB

by TwoJun 2023. 5. 10.

    과목명 : 운영체제(Operating System)

수업일자 : 2023년 05월 03일 (수)

 

 

 

 

 

 

1. Segmentation in x86 - Descriptor Table

Descriptor Table

 

 

 

 

 

 

2. Segmentation in x86 - GDT(Global Descriptor Table)

2-1. kd> dg 0 40

Command : kd> dg 0 40

 

 

 

 

 

 

3. Segmentation in x86 - Kernel Mode

3-1. kd> r

Command : kd> r

 

 

 

 

 

 

4. Segmentation in x86 - User Mode (1/2)

4-1. kd> !process 0 0, .process /p /r ffffdc0b04613080

Command : kd> !process 0 0, .process /p /r ffffdc0b04613080

 

 

 

4-2. kd> bp kernel32!readfile, bl, g

Command : kd> bp kernel32!readfile, bl, g

 

 

 

 

 

 

5. Segmentation in x86 - User Mode (2/2)

5-1. kd> r

Command : kd> r

 

 

 

5-2. kd> dg 0 40

Command : kd> dg 0 40

 

 

 

 

 

 

6. Segmentation in x86 - TIB (Thread Information Block)

6-1. FS

(1) TIB (Thread Information Block)

- TIB은 스레드 정보 블록이라고도 불리며, Win32의 자료 구조(Data Structure)로써 현재 실행 중인 스레드에 대한 정보를 저장하고 있습니다. 해당 구조체는 스레드 환경 블록으로도 알려져 있습니다.

 

 

 

6-2. kd> dt nt!_KPCR

Command : kd> dt nt!_KPCR

 

 

 

6-3. kd> dt ntdll!_NT_TIB

Command : kd> dt ntdll!_NT_TIB

 

 

 

6-4. kd> dt ntdll!_KPRCB

Command : kd> dt ntdll!_KPRCB

 

 

 

 

 

 

7. Segmentation in x86 - Memory Addressing

Memory Addressing

 

7-1. GDTR(Global Descriptor Table Register) : kd> r gdtr, dd gdtr

Command : kd> r gdtr, dd gdtr

 

 

 

 

 

 

8. Segmentation in x86 - Descriptor Table LAB

8-1. Descriptor Table (1)

Descriptor Table (1)

 

 

 

8-2. Descriptor Table (2) : kd> dg 0 20

Descriptor Table (2) : kd> dg 0 20

 

 

 

 

 

 

9. Segmentation in x86 - GDTR(Global Descriptor Table Register) and LDTR(Local Descriptor Table Register)

9-1. GDTR (Global Descriptor Table Register)

- GDTR 레지스터는 GDT의 32 Bit의 기본 주소(Base address)와 16 Bit의 Table Limit을 포함합니다.

 

 

 

9-2. LDTR(Local Descriptor Table Register)

- LDT는 GDT 내부에 존재하는 LDT Segment Descriptor(2번 System Segment Descriptor)를 통해 접근할 수 있는 Segment입니다. 이에 따라 LDT Segment의 경우 GDT 내부에 존재해야 하며 LDTR 레지스터는 Segment Selector, LDT의 기본 주소(Base address), LDT의 Segment Attributes(속성)를 담고 있습니다.

GDTR(Global Descriptor Table Register) and LDTR(Local Descriptor Table Register)

 

 

 

9-3. GDTR (Global Descriptor Table Register)

GDTR(Global Descriptor Table Register)

 

 

 

9-4. Segment Selector

Segment Selector

 

 

 

9-5. Example) Selector = 0x8. 0x9. 0xA. 0xB

Example) Selector = 0x8. 0x9. 0xA. 0xB

 

(1) kd> r gdtr

 

(2) kd> dg 0 30

 

(3) kd> db gdtr

 

(4) kd> dw gdtr

 

(5) kd> dd gdtr

 

(6) kd> !pte gdtr ( // kd> !pte va )

 

 

 

 

 

 

10. Paging in x86 - Control Registers

Control Registers

 

 

 

 

 

 

11. Paging in x86 - PAE(Physical Address Extensions) and PSE(Page Size Extensions)

PAE(Physical Address Extensions)

(1) 변환 프로세스는 Page Table 참조가 생략된 것을 제외하고 2 MB 및 4 KB Page에 대해 동일합니다.

 

(2) Paging 단위에 32 Bit Linear address를 제시하면 여러 필드로 나누어집니다.

 

- CR3는 기본 주소(Base address)를 가리킵니다.

 

- Linear address의 주소 비트 A[31, 30]은 PDPT에 대한 2 Bit 인덱스를 형성합니다. PDPT 항목에는 Page Directory의 기본 주소(Base address, 및 일부 제어 정보)가 포함되어 있습니다.

 

- 주소 비트 A[29 ... 21]는 Page Directory(Base 내부)에 대한 인덱스를 형성합니다. 이 Page Directory Entry(PDE)는 Page Table의 기본 주소(Base address)를 가리킵니다.(PDE.PS = 0, only) 또한 이 Page Table Entry(PTE)는 메모리의 4 KB 부분의 기본 주소(Base address)를 가리키고 있습니다.

 

- 나머지 주소 비트 A[20 ... 0](2 MB Page), A[11 ... 0](4 KB Page)는 메모리의 실제 페이지에 대한 인덱스(Offset)를 형성합니다.

 

- 모든 경우에 이러한 Table(PDPT, PDE 및 PTE)에 포함된 기본 주소는 물리적 주소이며 Paging 변환의 대상은 아니라는 특징을 가집니다.

 

 

 

 

11-1. PAE(Physical Address Extensions) / PSE(Page Size Extensions) Page Size Precedence

PAE(Physical Address Extensions) / PSE(Page Size Extensions) Page Size Precedence

 

 

 

11-2. LAB (2/5)

LAB (2/5)

(1) kd> !dlls, !peb

Command : kd> !dlls, !peb

 

(2) kd> r cr3, .formats cr3

Command : kd> r cr3, .formats cr3

 

(3) kd> !dq cr3 (or !dd cr3), !pte 0x7c800000, .formats 0x7c800000

Command : kd> !dq cr3 (or !dd cr3), !pte 0x7c800000, .formats 0x7c800000

 

(4) kd> !pte eip, db eip L10, .formats cr4, r cr3

Command : kd> !pte eip, db eip L10, .formats cr4, r cr3

 

 

 

11-3. No PAE(Physical Address Extensions)

(1)

No PAE(Physical Address Extensions) (1)

 

(2)

No PAE(Physical Address Extensions) (2)

 

(3)

No PAE(Physical Address Extensions) (3)

 

 

 

11-4. PDE(Page Directory Entry) and PTE(Page Table Entry) for No PAE(Physical Address Extensions)

PDE(Page Directory Entry) and PTE(Page Table Entry) for No PAE(Physical Address Extensions)

 

 

 

11-5. PDE(Page Directory Entry) and PTE(Page Table Entry)

PDE(Page Directory Entry) and PTE(Page Table Entry)

 

 

 

11-6. PAE(Physical Address Extensions)

PAE(Physical Address Extensions)

 

 

 

 

 

 

12. Paging in x86 - PDPT(Page Directory Pointer Table)

PDPT(Page Directory Pointer Table)

 

 

 

12-1. Example)

Example data

 

 

 

 

 

 

13. Paging in x86 - Format of CR3 with PAE(Physical Address Extensions)

Format of CR3 with PAE(Physical Address Extensions)

 

 

 

13-1. Example)

Example data

 

 

 

 

 

 

14. Paging Structures for PAE(Physical Address Extensions)

Paging Structures for PAE(Physical Address Extensions)

 

14-1. LAB (1/5)

(1) kd> !process 0 0, .process /i ffffdc0b4613080, g, !process ffffdc0b04613080

Command : kd> !process 0 0, .process /i ffffdc0b4613080, g, !process ffffdc0b04613080

 

 

 

(2) kd> dt nt!_EPROCESS ffffdc0b04613080 Pcb.DirectoryTableBase, !vad ffffdc0b4d2ca60

Command : kd> dt nt!_EPROCESS ffffdc0b04613080 Pcb.DirectoryTableBase, !vad ffffdc0b4d2ca60

 

 

 

 

 

 

15. Paging in x86 - VA 2 PA for EIP

VA2PA for EIP

 

 

15-1. LAB (3/5)

(1) kd> !dq 00a25000, !dq 00a25000 + 0xF20

Command : kd> !dq 00a25000, !dq 00a25000 + 0xF20

 

 

 

15-2. LAB (4/5)

(1) kd> !pte 0x7c800000, !dq 086ea000

Command : kd> !pte 0x7c800000, !dq 086ea000

 

 

 

15-3. LAB (5/5)

(1) kd> !dq 0b0c2000, dq 0x7c800000, dd 0x7c800000

Command : kd> !dq 0b0c2000, dq 0x7c800000, dd 0x7c800000

 

 

 

 

 

 

16. Etc Note 

(1) kd> .formats 8f2f0000, !dd @cr3, dt -p nt!_hardware_pte 3fed4510

Command : kd> .formats 8f2f0000, !dd @cr3, dt -p nt!_hardware_pte 3fed4510

 

(2) kd> dt -p nt!_hardware_pte ((0x36716*@$pagesize)+(0x79*@@(sizeof(nt!_hardware_pte))),

dt -p nt!_hardware_pte ((0x2201e*@$pagesize)+(0xF0*@@(sizeof(nt!_hardware_pte)))

Cpmmand : kd> dt -p nt!_hardware_pte ((0x36716*@$pagesize)+(0x79*@@(sizeof(nt!_hardware_pte))), dt -p nt!_hardware_pte ((0x2201e*@$pagesize)+(0xF0*@@(sizeof(nt!_hardware_pte)))

 

 

(3) kd> dt -p nt!_hardware_pte ((0x2201e*@$pagesize)+(0xF0*@@(sizeof(nt!_hardware_pte))),

!dq (0x102d963 & 0xFFFFFF000) + (0x000010000*@@(sizeof(nt! _MMPTE))) L1

Command : kd> dt -p nt!_hardware_pte ((0x2201e*@$pagesize)+(0xF0*@@(sizeof(nt!_hardware_pte))), !dq (0x102d963 & 0xFFFFFF000) + (0x000010000*@@(sizeof(nt! _MMPTE))) L1

 

 

 

 

 

 

17. Paging

Paging

 

 

 

 

 

 

18. Paging in x86 - !pte

(1) kd> !pte b742a310, dd /p 3edb1000 + 2DD * 4, dd C0300B74, dd b742a310, dd /p 28857000 + 310

Command : kd> !pte b742a310, dd /p 3edb1000 + 2DD * 4, dd C0300B74, dd b742a310, dd /p 28857000 + 310

 

(2) kd> dd /p ba7000 + 2A * 4, dd C02DD0A8, rm ff, .formats b742a310

Command : kd> dd /p ba7000 + 2A * 4, dd C02DD0A8, rm ff, .formats b742a310

 

(3) kd> r

Command : kd> r

 

(4) kd> !process 0 0, !process ffffdc0b04613080, !vad ffffdc0b04d2ca60, .process /p ffffdc0b04613080

Command : kd> !process 0 0, !process ffffdc0b04613080, !vad ffffdc0b04d2ca60, .process /p ffffdc0b04613080

 

(5) kd> !dc 6c40000, !dc abcde000, !dc dcdef000

Command : kd> !dc 6c40000, !dc abcde000, !dc dcdef000

 

 

 

 

 

 

- 학부에서 수강했던 전공 수업 내용을 정리하는 포스팅입니다.

- 내용 중에서 오타 또는 잘못된 내용이 있을 시 댓글로 남겨주시면 감사하겠습니다!

댓글