/
note.txt
168 lines (160 loc) · 15.7 KB
/
note.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
Registers
通用寄存器
31..............16 15.....8 7.......0
┏━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━┓
┃ ┃ AH ┃ AL ┃ EAX 累加
┣━━━━━━━━━━━━━━━━━╋━━━━━━━━╋━━━━━━━━┫
┃ ┃ BH ┃ BL ┃ EBX 基址
┣━━━━━━━━━━━━━━━━━╋━━━━━━━━╋━━━━━━━━┫
┃ ┃ CH ┃ CL ┃ ECX 计数
┣━━━━━━━━━━━━━━━━━╋━━━━━━━━╋━━━━━━━━┫
┃ ┃ DH ┃ DL ┃ EDX 数据
┣━━━━━━━━━━━━━━━━━╋━━━━━━━━┻━━━━━━━━┫
┃ ┃ SI ┃ ESI 源变址
┣━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━┫
┃ ┃ DI ┃ EDI 目标变址
┣━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━┫
┃ ┃ SP ┃ ESP 堆栈指针
┣━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━┫
┃ ┃ BP ┃ EBP 基址指针
┗━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━┛
段寄存器
15................0
┏━━━━━━━━━━━━━━━━━┓
┃ SS ┃ 堆栈段
┣━━━━━━━━━━━━━━━━━┫
┃ CS ┃ 代码段
┣━━━━━━━━━━━━━━━━━┫
┃ DS ┃ 数据段
┣━━━━━━━━━━━━━━━━━┫
┃ ES ┃ ┓
┣━━━━━━━━━━━━━━━━━┫ ┃
┃ FS ┃ ╋ 附加数据段
┣━━━━━━━━━━━━━━━━━┫ ┃
┃ GS ┃ ┛
┗━━━━━━━━━━━━━━━━━┛
指令指针寄存器和标志寄存器
31..............16 15...............0
┏━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓
┃ ┃ IP ┃ EIP
┣━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━┫
┃ ┃ FLAGS ┃ EFLAGS
┗━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━┛
系统地址寄存器
31.................................0 15...............0
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓
┃ Base address ┃ Limit ┃ GDTR
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━┫
┃ Base address ┃ Limit ┃ IDTR
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━┫
┃ Selector ┃ TR
┣━━━━━━━━━━━━━━━━━┫
┃ Selector ┃ LDTR
┗━━━━━━━━━━━━━━━━━┛
GDT (Global Descriptor Table)
High..................................................................Low
┏━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┓
┃ BYTE 7 ┃ BYTE 6 ┃ BYTE 5 ┃ BYTE 4 ┃ BYTE 3 ┃ BYTE 2 ┃ BYTE 1 ┃ BYTE 0 ┃
┃76543210┃76543210┃76543210┃76543210┃76543210┃76543210┃76543210┃76543210┃
┣━━━━━━━━╋━━━━━━━━┻━━━━━━━━╋━━━━━━━━┻━━━━━━━━┻━━━━━━━━╋━━━━━━━━┻━━━━━━━━┫
┃ 31..24 ┃ ┃ 23..0 ┃ 15..0 ┃
┃Seg bs 2┃ Attributes ┃ Segment base 1 ┃ Segment limit 1 ┃
┗━━━━━━━━┻━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━┛
| |
| +-----------------------------+
| |
┏━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ BYTE 6 ┃ BYTE 5 ┃
┣━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━╋━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┫
┃ 7┃ 6┃ 5┃ 4┃ 3┃ 2┃ 1┃ 0┃ 7┃ 6┃ 5┃ 4┃ 3┃ 2┃ 1┃ 0┃
┣━━╋━━╋━━╋━━╋━━┻━━┻━━┻━━╋━━╋━━┻━━╋━━╋━━┻━━┻━━┻━━┫
┃ G┃ D┃ 0┃ A┃ Segment ┃ P┃ DPL ┃ S┃ TYPE ┃
┃ ┃ /┃ ┃ V┃ limit 2 ┃ ┃ ┃ ┃ ┃
┃ ┃ B┃ ┃ L┃ ┃ ┃ ┃ ┃ ┃
┗━━┻━━┻━━┻━━┻━━━━━━━━━━━┻━━┻━━━━━┻━━┻━━━━━━━━━━━┛
Gate
High..................................................................Low
┏━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┓
┃ BYTE 7 ┃ BYTE 6 ┃ BYTE 5 ┃ BYTE 4 ┃ BYTE 3 ┃ BYTE 2 ┃ BYTE 1 ┃ BYTE 0 ┃
┃76543210┃76543210┃76543210┃76543210┃76543210┃76543210┃76543210┃76543210┃
┣━━━━━━━━┻━━━━━━━━╋━━━━━━━━┻━━━━━━━━╋━━━━━━━━┻━━━━━━━━╋━━━━━━━━┻━━━━━━━━┫
┃ 31..16 ┃ ┃ ┃ 15..0 ┃
┃ Offset ┃ Attributes ┃ Selector ┃ Offset ┃
┗━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━┛
| |
| +-----------------------------+
| |
┏━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ BYTE 5 ┃ BYTE 5 ┃
┣━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━╋━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┫
┃ 7┃ 6┃ 5┃ 4┃ 3┃ 2┃ 1┃ 0┃ 7┃ 6┃ 5┃ 4┃ 3┃ 2┃ 1┃ 0┃
┣━━╋━━┻━━╋━━╋━━┻━━┻━━┻━━╋━━╋━━╋━━╋━━━━━┻━━┻━━┻━━┫
┃ P┃ DPL ┃ S┃ TYPE ┃ 0┃ 0┃ 0┃ Param Count ┃
┗━━┻━━━━━┻━━┻━━━━━━━━━━━┻━━┻━━┻━━┻━━━━━━━━━━━━━━┛
Selector
┏━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┓
┃15┃14┃13┃12┃11┃10┃ 9┃ 8┃ 7┃ 6┃ 5┃ 4┃ 3┃ 2┃ 1┃ 0┃
┣━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━╋━━╋━━┻━━┫
┃ Descriptor index ┃TI┃ RPL ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━┻━━━━━┛
PDE
31.........................................................12 11......9 8 7 6 5 4 3 2 1 0
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┓
┃ Page-Table Base Address ┃ Avail ┃ G ┃ PS┃ 0 ┃ A ┃PCD┃PWT┃U/S┃R/W┃ P ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┛
PTE
31.........................................................12 11......9 8 7 6 5 4 3 2 1 0
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┓
┃ Page Base Address ┃ Avail ┃ G ┃PAT┃ D ┃ A ┃PCD┃PWT┃U/S┃R/W┃ P ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┛
ELF headers
typedef struct {
unsigned char e_ident[16]; // 00:
Elf32_Half e_type; // 10: 文件类型
Elf32_Half e_machine; // 12: 该程序依赖的体系结构
Elf32_word e_version; // 14: 版本
Elf32_addr e_entry; // 18: 程序入口地址
Elf32_off e_phoff; // 1C: Program header table 在文件中的偏移量
Elf32_off e_shoff; // 20: Section header table 在文件中的偏移量
Elf32_word e_flags; // 24:
Elf32_Half e_ehsize; // 28: ELF header 大小
Elf32_Half e_phentsize; // 2A: 一个 Program header 的大小
Elf32_Half e_phnum; // 2C: Program header 的数量
Elf32_Half e_shentsize; // 2E: 一个 Section header 的大小
Elf32_Half e_shnum; // 30: Section header 的数量
Elf32_Half e_shstrndx; // 32:
} Elf32_Ehdr;
typedef struct {
Elf32_word p_type; // 00: 段类型
Elf32_off p_offset; // 04: 该段第一个字节在文件中的偏移
Elf32_addr p_vaddr; // 08: 该段第一个字节在内存中的虚拟地址
Elf32_addr p_paddr; // 0C: 为物理地址保留
Elf32_word p_filesz; // 10: 段在文件中的长度
Elf32_word p_memsz; // 14: 段在内存中的长度
Elf32_word p_flags; // 18: 与段相关的标志
Elf32_word p_align; // 1C: 该段在文件以及内存中对齐方式
} Elf32_Phdr;
Partition Table
━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
offset┃length┃ Description
━━━━━━╋━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
00 ┃ 1 ┃ 状态(80h=可引导;00h=非引导;其他=非法)
━━━━━━╋━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
01 ┃ 1 ┃ 起始磁头号
━━━━━━╋━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
02 ┃ 1 ┃ 起始扇区号(仅低 6 位,高 2 位为起始柱面号 8、9 位)
━━━━━━╋━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
03 ┃ 1 ┃ 起始柱面号低 8 位
━━━━━━╋━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
04 ┃ 1 ┃ 分区类型(System ID)
━━━━━━╋━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
05 ┃ 1 ┃ 结束磁头号
━━━━━━╋━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
06 ┃ 1 ┃ 结束扇区号(仅低 6 位,高 2 位为结束柱面号 8、9 位)
━━━━━━╋━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
07 ┃ 1 ┃ 结束柱面号低 8 位
━━━━━━╋━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
08 ┃ 4 ┃ 起始扇区 LBA
━━━━━━╋━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
12 ┃ 4 ┃ 扇区数目
━━━━━━┻━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━