You are on page 1of 55

Linux

051287161316
Autumn 2009

Linux
Linux
Linux

11/17/09

Linux OS Analysis

2/54


X86
LinuxX86

11/17/09

Linux OS Analysis

4/54


intelx86
(segment)
(offset)
324G

CPU

11/17/09


Linux OS Analysis


5/54

11/17/09

Linux OS Analysis

6/54

1
(segment register)
I386
=

16
cs, ss, ds, es, fsgs
CPU3
cs

ss
ds

11/17/09

Linux OS Analysis

7/54

80386Intel

20
1616
440

=*16+

32
16
GDT
GDT
GDT

11/17/09

Linux OS Analysis

8/54

cs:
CPUCPL (current
privilege level)03

=+
GDT

11/17/09

Linux OS Analysis

9/54

GDT (segment descriptor)


8

GDT (global description table)

GDTRAMGDTR
GDTRAM

LDTLocal Description Table


x86LDT
LDTRAMLDTRLDT

11/17/09

Linux OS Analysis

10/54

Intelx86

Data Segment Descriptor


Code Segment Descriptor


Task State Segment Descriptor



LDT

System Segment Descriptor

11/17/09

Linux OS Analysis

11/54


base32
limit20
G1
0
14KB

S1
0
1

11/17/09

Linux OS Analysis

12/54

Type4

DPL2
00bCPL=00b
..
11b

1
0
1

11/17/09

Linux OS Analysis

13/54

Descriptor
Privilege Level

11/17/09

Linux OS Analysis

14/54

15

index
TI RPL
Segment
Selector
Segment selector

16GDTLDT

16
13GDT
1TI(Table Indicator)
(LDTLinux
2RPL(request privilege level)
csCPU
/

11/17/09

Linux OS Analysis

15/54

11/17/09

Linux OS Analysis

16/54


GDTLDT

GDTRLDTR

11/17/09

OS Analysis
Linux

17/54

Linux
linux

0-4G

linux-2.6.26/include/asm-x86/desc.h

11/17/09

Linux OS Analysis

18/54

Linux
LinuxGDT

11/17/09

arch/x86/kernel/head_32.S

Linux OS Analysis

19/54

arch/x86/boot/pm.c

11/17/09

Linux OS Analysis

20/54

arch/x86/kernel/cpu/common.c

11/17/09

__KERNEL_CS
0x10=0000 0000 0001 0000b
Index=2

RPL=0

GDT

4GB

11/17/09

Linux OS Analysis

22/54

__KERNEL_DS
0x18=0000 0000 0001 1000b
Index=3

RPL=0

GDT

4GB

11/17/09

Linux OS Analysis

23/54

__USER_CS=0x33

11/17/09

Linux OS Analysis

24/54

__USER_DS=0x2b

11/17/09

Linux OS Analysis

25/54

LinuxGDT
1i386/boot/herder.S-->i386/boot/main.c: main() ->arch/x86/boot/pm.c:go_to_protected_mode-->setup_gdt
GDT
GDT

2i386/boot/compressed/head_32.S

3i386/kernel/head_32.S
boot_gdtGDT

early_gdt_descrper_cpu__gdt_page
arch/x86/kernel/cpu/common.c
11/17/09

Linux OS Analysis

26/54


====

(page
table)

IntelCR0

11/17/09

Linux OS Analysis

27/54


(page frame)
RAM

11/17/09

Linux OS Analysis

28/54


i386intel4KB
323
(directory)
(Table)
(offset)

10
10
12

(page directory)
(page table)

CPUCR3

11/17/09

Linux OS Analysis

29/54

CR3

11/17/09

Intel
80x86
Linux
OS Analysis
30/54

4KB1212

PresentAccessedDirtyRead/Write
User/Supervisor
present0
CR214

11/17/09

Linux OS Analysis

31/54

pentium
4K4M

4M

CR3

11/17/09

Linux OS Analysis

32/54


User/Spuervisor
0CPL3(linux
)
1

Read/Write
0
1

11/17/09

Linux OS Analysis

33/54


p1
0x200000000x2003ffff256KB
0x400000x4064

0x200000000010 0000 0000 0000 0000 0000 0000 0000b

0x80=128

0x0=0

0x20003ffff0010 0000 0000 0011 1111 1111 1111 1111b

0x80=128
11/17/09

0x3f=63

Linux OS Analysis

34/54

p1
/
1023

1023
p1

p1

128
63

p1

11/17/09

0
p1
Linux OS Analysis

35/54


0x20021406
3
0x20021406=0010 0000 0000 0010 0001 0100 0000 0110b

0x80=128

CR3

0x21

p1

Present=0

0x406
Xxx
xxx
Xx
xxxx
xxx
Xx
xx

p1

0x200000000x2003ffff

11/17/09

Linux OS Analysis

36/54

Linux
Linux3
(Page Global Directory)
(Page Middle Directory)
(Page Table)

11/17/09

Linux OS Analysis

37/54

Linux

CR3
11/17/09

Linux OS Analysis

38/54

Linux
Linux
MMU

()()

11/17/09

Linux OS Analysis

39/54


linuxCR3

CR3
CPU

11/17/09

Linux OS Analysis

40/54

Linux

Linux

include/asm_x86/page.h
include/asm_x86/pgtable.h
include/asm_x86/pgtable_2level.h
......

11/17/09

Linux OS Analysis

41/54


PAGE_SHIFT
PMD_SHIFT
PGDIR_SHIFT
PTRS_PER_PTE
PTRS_PER_PMD
PTRS_PER_PGD

11/17/09

Linux OS Analysis

42/54


include/asm_1386/page_32.h
pte_t, pmd_t, pgd_t

include/asm_1386/page.h
pgprot_t

__pte(), __pmd(), __pgd(), __pgprot()


pte_val(), pmd_val(), pgd_val(), pgprot_val()

11/17/09

Linux OS Analysis

43/54

///
pte_none(), pmd_none(), pgd_none()
0

pte_present(), pmd_present(), pgd_present()


present1

pte_clear(), pmd_clear(), pgd_clear()


pmd_bad(), pgd_bad()

pte_read(), pte_write(), pte_exec(),

11/17/09

Linux OS Analysis

44/54

linux
0x00100000
1MB
Linux

2MBRAM

11/17/09

Linux OS Analysis

45/54

1MB
0~1MB
0x0~0x1000BIOS
0x000a0000~0x000fffffBIOSVRAM

Linux
1MB

11/17/09

Linux OS Analysis

46/54

Linux2.45122MB
<1MB

11/17/09

Linux OS Analysis

47/54

0~3G
3G~4G

7680xc0000000

11/17/09

Linux OS Analysis

48/54


Linux0xc0000000

11/17/09

Linux OS Analysis

49/54


CPU

i386/kernel/head_32.S


RAM

11/17/09

Linux OS Analysis

50/54

Linux
i386/kernel/head_32.S
arch/x86/kernel/head_32.S

vmlinux_32.lds.S

11/17/09

Linux OS Analysis

51/54

Linux

11/17/09

Linux OS Analysis

52/54

swapper_pg_dirpagetable_init

arch/x86/mm/init_32.c
kernel_physical_mapping_init

mem_initzap_low_mappings
11/17/09

Linux OS Analysis

53/54


cache
MM

TLB
CR3TLB

11/17/09

Linux OS Analysis

54/54


__USER_CS __USER_DS
GDTRPL
Linux

11/17/09

Linux OS Analysis

55/54

You might also like