-
Notifications
You must be signed in to change notification settings - Fork 0
/
dojo.yml
257 lines (193 loc) · 7 KB
/
dojo.yml
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
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
id: program-lab
name: "【课程实践1:程序生成与运行实验】"
description: |
课程实践1,主要内容为程序生成与运行,包括程序的预处理、编译、汇编、链接、执行等内容。
type: topic
award:
emoji: 😀
modules:
- id: preprocess
name: 1.1 预处理
description: 在本单元中,你将学习到有关C程序预处理的基本原理和技巧,包括宏定义、条件编译、头文件包含等。
challenges:
- id: level1
name: "1.1.1"
description: Your first challenge, hope you enjoy it.
- id: level2
name: "1.1.2"
description: try to `#define` constants.
- id: level3
name: "1.1.3"
description: try to `#define` strings.
- id: level4
name: "1.1.4"
description: try to `#define` functions and variables.
- id: level5
name: "1.1.5"
description: do-while-zero macro is a common trick.
- id: level6
name: "1.1.6"
description: conditional compilation is also a common technique.
- id: level7
name: "1.1.7"
description: do you know `#include`?
- id: level8
name: "1.1.8"
description: handle `#ifdef` and `#ifndef` correctly.
- id: compilation
name: 1.2 编译
description: 在本单元中,你将会学习到有关C程序编译的几个重要步骤和几种C程序的中间表示形式,包括抽象语法树(AST)和LLVM中间表示(IR),最后对编译优化有个初步了解。
challenges:
- id: level9
name: "1.2.1"
description: basic assignment and arithmetic operations in clang AST.
- id: level10
name: "1.2.2"
description: array and pointer operations in clang AST.
- id: level11
name: "1.2.3"
description: control flow operations in clang AST.
- id: level12
name: "1.2.4"
description: struct and field operations in clang AST.
- id: level13
name: "1.2.5"
description: loop in clang AST.
- id: level14
name: "1.2.6"
description: basic assignment and arithmetic operations in LLVM IR
- id: level15
name: "1.2.7"
description: constant string in LLVM IR
- id: level16
name: "1.2.8"
description: array and pointer operations in LLVM IR
- id: level17
name: "1.2.9"
description: control flow operations in LLVM IR
- id: level18
name: "1.2.10"
description: field operations in LLVM IR
- id: level19
name: "1.2.11"
description: loop in LLVM IR
- id: level20
name: "1.2.12"
description: static and global variables in LLVM IR
- id: level21
name: "1.2.13"
description: do you know how to merge 2 funtions?
- id: level22
name: "1.2.14"
description: compilation optimization is performed on (LLVM) IR
- id: level23
name: "1.2.15"
description: compilation optimization is performed on (LLVM) IR
- id: level24
name: "1.2.16"
description: compilation optimization is performed on (LLVM) IR
- id: level25
name: "1.2.17"
description: try to generate a assembly file from LLVM IR
- id: assembly
name: 1.3 汇编
description: |
本单元的“汇编”并不是指汇编语言,而是指“汇编”这个过程,即将汇编代码转换为机器码的过程。
在本单元中,你将会探索“汇编”的产物,即 ELF 文件,包括 ELF 文件的基本结构、ELF 文件的各个部分的作用等。
challenges:
- id: level26
name: "1.3.1"
description: try to compile a embryo ELF object file.
- id: level27
name: "1.3.2"
description: try to compile a baby ELF object file.
- id: level28
name: "1.3.3"
description: try to compile a baby ELF object file with custom section.
- id: level29
name: "1.3.4"
description: explore the ELF header.
- id: level30
name: "1.3.5"
description: explore the ELF Section.
- id: level31
name: "1.3.6"
description: explore the ELF Section Header Table.
- id: level32
name: "1.3.7"
description: explore the ELF Section Header Table.
- id: level33
name: "1.3.8"
description: what is a `symbol` in ELF?
- id: level34
name: "1.3.9"
description: explore the ELF Symbol Table.
- id: linking
name: 1.4 链接
description: 在本单元中,你将会学习到有关链接的基本知识,以及链接器 ld 的基本使用方法。
challenges:
- id: level35
name: "1.4.1"
description: try to use `ld` to link multiple object files.
- id: level36
name: "1.4.2"
description: explore how `ld` works.
- id: level37
name: "1.4.3"
description: try to link multiple object files into a single executable file and make it executable.
- id: execution
name: 1.5 程序执行
description: 在本单元中,你将会学习到有关程序执行和进程的相关知识,包括内存布局,动态链接,函数调用等。
challenges:
- id : level38
name: "1.5.1"
description: try to execute a program and explore the memory layout of the program.
- id : level39
name: "1.5.2"
description: explore the program header table of the ELF file.
- id : level40
name: "1.5.3"
description: introduce the dynamic linking.
- id : level41
name: "1.5.4"
description: explore plt and got in an ELF executable file.
- id : level42
name: "1.5.5"
description: explore the basic program memory layout.
- id: level43
name: "1.5.6"
description: explore the stack frame of function call.
- id: level44
name: "1.5.7"
description: explore the calling convention of function call.
- id: level45
name: "1.5.8"
description: final challenge, try to find memory range of corrsponding `variable` in the process's memory.
- id: debugger
name: 调试器 [可选]
description: 在本单元中,你会学习到调试器的常用方法
challenges:
- id : level1
name: "1.6.1"
description: ""
- id : level2
name: "1.6.2"
description: ""
- id : level3
name: "1.6.3"
description: ""
- id : level4
name: "1.6.4"
description: ""
- id : level5
name: "1.6.5"
description: ""
- id : level6
name: "1.6.6"
description: ""
- id : level7
name: "1.6.7"
description: ""
- id : level8
name: "1.6.8"
description: ""