docs: Charles 高级技巧

This commit is contained in:
binpeng.liu
2022-11-29 23:57:02 +08:00
parent 09cb172354
commit 22d292aede

View File

@@ -208,7 +208,7 @@ mov word ptr [0], 66h
栈是一种后进先出特点的数据存储空间LIFO
![](./../assets//Stack.png)
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/Stack.png)
- 8086 会将 CS 作为代码段的段地址,将 `CS:IP` 指向的指令作为下一条需要取出执行的指令
@@ -224,7 +224,7 @@ SP堆栈寄存器存放栈的偏移地址
#### push
![](./../assets//StackPush.png)
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/StackPush.png)
`push ax` 指令执行,会拆解为:
@@ -236,7 +236,7 @@ ax = ah + al所以 ax 中的数据入栈需要占据2个单位sp = sp - 2
#### pop
![](./../assets//stackPop.png)
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/stackPop.png)
`pop ax` 指令执行,会拆解为:
@@ -248,7 +248,7 @@ ax = ah + al所以 ax 中的数据入栈需要占据2个单位sp = sp - 2
当一个栈空间是空的时候,`SS:SP` 指向栈空间最高地址单元的下一个单元。
![](./../assets//emptyStack.png)
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/emptyStack.png)
当一个栈空或者满的时候,执行 PUSH、POP 指令需要注意,因为 `SP = SP + 2``SP = SP - 2` 都会导致将错误的数据入栈或者错误的数据出栈,导致发生不可预期的事情。
@@ -457,7 +457,7 @@ int main(int argc, const char * argv[]) {
}
```
![](./../assets//AssembleReturn.png)
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/AssembleReturn.png)
可以看到 return 的值是保存在 eax 寄存器中。为什么是 ee是32位的意思环境老款 MBP 电脑运行)。
@@ -571,7 +571,7 @@ int main(int argc, const char * argv[]) {
CPU 会在栈内部将局部变量的地方临时分配10字节大小空间用来存储局部变量。这个怎么实现呢`SP = SP - 10` 这条指令用来将栈顶指针改变留出10字节大小空间。但是留出的空间是空的万一 `CS:IP` 指向这块区域会把里面的数据当作指令去执行则可能发生一些不可预知的错误。Windows 平台,针对预留的局部变量空间,会走动填充 cc也就是 `int 3 ` 断点中断,只要 `CS:IP` 去执行就会断点中断,更安全。
![](./../assets//AssembleFunctionStack.png)
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/AssembleFunctionStack.png)
关键代码如下:
@@ -635,6 +635,6 @@ sum:
Stack Frame Layout代表一个函数的执行环境。包括参数、返回地址、局部变量和包括在本函数内部执行的所有内存操作等
![](./../assets//StackFrame.png)
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/StackFrame.png)
![](./../assets//CSStackFrame.png)
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/CSStackFrame.png)