您的位置:首页 > 其它

逆向工程核心原理学习笔记(十一):栈

2017-06-16 15:14 260 查看
栈(stack)用途广泛,通常用于存储局部变量、传递函数参数,保存函数返回地址等。

调试程序需要不断查看栈内存,这是很有必要的。

栈是一种数据结构,按照后进先出的原则存储数据。

栈的特征:






一个进程中,栈顶指针(ESP)初始状态指向栈顶端。

执行PUSH命令将数据压入栈的时候,栈顶指针就会上移到栈顶端。

执行POP命令从栈中弹出数据时,若栈为空,那么栈顶指针重新移动到栈底端。

换言之,栈时一种高地址向低地址扩展的数据结构。

栈操作实例:

此时栈顶指针ESP指向19FF7C






执行完PUSH命令:






栈顶指针ESP减少了4,指向了12FF78地址

继续执行POP命令:






执行完发现ESP增加了4个字节,栈又变成了初始状态。

总结一下规律:

向栈内压入数据时,栈顶指针减小,向低地址移动。

从栈内弹出数据时,栈顶指针增加,向高地址移动。

后进先出。




0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐