Skip to content

Commit 52092df

Browse files
[函数调用](add)
1 parent b1ce7c0 commit 52092df

File tree

3 files changed

+60
-0
lines changed

3 files changed

+60
-0
lines changed

note/函数调用过程.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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

pic/函数调用1.png

101 KB
Loading

pic/函数调用2.png

1.41 MB
Loading

0 commit comments

Comments
 (0)