pwn学习

本文详细解释了栈的LIFO特性,重点介绍了栈的操作(push和pop),以及栈帧在函数调用中的使用。讨论了栈帧的创建、参数传递和返回过程,以及如何通过寄存器如ebp和esp进行管理。还提到了如何在Ubuntu虚拟机上安装WMTools并优化源以提高下载速度。
摘要由CSDN通过智能技术生成

51efcc3cf0de4755a08bb28d5c540548.png栈是一种LIFO的数据结构,栈支持两种基本操作push和pop,push就是将数据压入栈中,pop就是将栈中的数据弹出并且储存到寄存器或者是内存中

栈的生长是从高地址到低地址的,及从上往下输入数据

pop弹出后,栈中的数据并没有被清空 只是无法直接访问(但是仍然可以访问)

栈帧也是一种栈,(stack frame),他是用来存储调用函数过程中的一些参数,返回值等,栈底的地址最高,用ebp来表示(extended base pointer)栈顶的地址最低 用esp来表示,在栈顶与栈底之间就是栈帧,每次调用一个函数就会形成一个栈帧,调用者叫caller,被调用者叫callee,我们需要在被调用者返回后ebp和esp的值与调用前一致,我们要用栈来保存这些数据

函数的调用:调用者的栈帧有两个,先是将被调用的函数参数压入栈中,接着是将返回地址压入栈中。     被调用的栈帧:首先push一下调用者的ebp,将esp指向ebp,然后move ebp,esp(就是将esp的值赋给ebp,ebp的值就刷新了),ed4bd962c7d54e998fd3dbb3a600c785.png

 

sub esp,0x12:给esp分配空间,

768a5a90e7884fa7ae58cde2b92e488d.png

往后赋值即可

60d4fd3a1ef8480f871557e726d72387.png

函数的返回和调用相反,他是把ebp的值给了esp,然后再释放ebp(开始存的地址是什么pop后就去了哪里),最后 leave ret就是pop+jump,主打一个恢复原状!ebp跑到了最上面 就是调用函数的开头!然后esp会下移以为,因为地址从高到低,所以后移就是上移,这样esp就到了主函数的最下面!

aba570376f9e487dbde1c5c78de4ac28.png

寄存器

2b6499f9bb744390a8dba1d90e64a309.png

安装wmtools:

在虚拟机上打开ubuntu系统,在桌面打开压缩包,在终端解压,进入压缩包,安装 一直回车即可

6400f7a9c4954ca8af281b42034298da.png

 

换源:找一个离自己近的,这样下载速度会比较快

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值