【逆向工程核心原理】第五章——栈及栈操作示例(OllyDbg中栈压入或弹出数据时栈顶指针的变化规律)

栈内存在进程中的作用:

(1)暂时保存函数内的局部变量。
(2)调用函数时传递参数。
(3)保存函数返回后的地址。
栈其实是一种数据结构,它按照FILO(First In Last Out,后进先出)的原则存储数据。

请添加图片描述

一个进程中,栈顶指针(ESP)初始状态指向栈底端。执行PUSH命令将数据压入栈时,栈顶指针就会上移到栈顶端。执行POP命令从栈中弹出数据时,若栈为空,则栈顶指针重新移动到栈底端。换言之,栈是一种由高地址向低地址扩展的数据结构,图5-1中,栈是由下往上扩展的。由于栈具有这种特征,所以我们常常说“栈是逆向扩展的”,向栈中压数据就像一层层砌砖,每向上砌一层,砖墙就增高一点儿。

在OllyDbg里运行stack.exe文件,为一个示例
如图,ESP(栈顶)的指针为0019FF74,右下角也是。
在这里插入图片描述

  1. 在代码窗口中按F7键(Step Into),执行401000地址处的PUSH100命令。ESP值变为0019FF70,比原来减少了4个字节。并且当前的栈顶指针指向0019FF70地址,栈顶该地址中保存着100这个值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值