File tree Expand file tree Collapse file tree 3 files changed +60
-0
lines changed Expand file tree Collapse file tree 3 files changed +60
-0
lines changed Original file line number Diff line number Diff line change 1+ # 函数的调用过程
2+
3+ ## 目录
4+
5+ * [ 函数的调用过程统] ( #函数的调用过程 )
6+ * [ 函数栈切换] ( #函数栈切换 )
7+ * [ 协程的基本原理] ( #协程的基本原理 )
8+ * [ 热更新的基本原理] ( #热更新的基本原理 )
9+ ---
10+
11+ ## 函数的调用过程
12+
13+ * 函数的调用栈示意图:
14+ ![ tu] ( ../pic/函数调用1.png )
15+
16+ * 函数调用对应的汇编代码:
17+ ![ tu] ( ../pic/函数调用2.png )
18+
19+ 通过gdb disas/rs + 函数名称 可以查看对应的汇编代码。查看汇编发现:
20+
21+ 1. 在main调用add函数的时候,这里的参数是通过寄存器在传递的
22+ 2. 每进入一个新的函数之后,都是 push %rbp,mov %rsp,%rbp。开辟新的rbp 和 rsp
23+ 3. 返回的返回值存放在eax中
24+ 4. 函数如何return (todo)
25+
26+ * c调用汇编的代码
27+
28+ todo
29+
30+ ## 函数栈切换
31+
32+ 搞明白函数的调用过程,可以进一步去思考如何去进行函数切换。
33+
34+ 1 . 思路1:堆栈溢出攻击
35+
36+ 覆盖返回地址,实现函数跳转
37+
38+ 2 . 思路2:覆盖函数的地址的汇编代码,实现函数跳转
39+
40+ 3 . 思路3:覆盖函数的地址首部,插入跳转到其他函数的汇编代码,实现函数跳转
41+
42+ 4 . set/jump的方案
43+
44+ ## 协程的基本原理
45+
46+ 核心 :
47+
48+ ucontext协程库 上下文切换的思路
49+
50+ libco 上下文切换的思路
51+
52+
53+ 1 . 共享栈 和 非共享栈 协程的区别
54+
55+ 2 . libco hook 系统函数的思路
56+
57+ 3 .
58+
59+ ## 热更新的基本原理
60+ todo
You can’t perform that action at this time.
0 commit comments