小白的反汇编学习笔记----关于调用call前后的堆栈知识

反汇编的过程中被两个寄存器搞晕了
以下仅为个人理解,小白刚开始学习,有任何不正确的希望大家和各位老师及时指正。

栈的意义:
1.某子函数进入前,必须搞到一块栈空间,用于存放自己的参数/数据/变量(临时变量)
2.子函数与父程序之间的参数传递,必须通过栈传递参数(父程序将需要处理的参数传给子函数,子函数也需要将处理完的参数传回给父程序),win32中,栈的使用遵循“先进后出”
ps:全局变量在哪里?在PE程序(exe/dll/sys)的数据段。

esp(栈顶指针寄存器)
ebp(栈底指针寄存器)
通过对比不同老师的学习视频,和查找相关资料,根据自己的理解总结了四张图

那么了解这个东西有什么作用呢?
目前我学习到的有,通过判断函数内部开辟栈空间的大小,判断程序动作,典型的有:
某些吃鸡类游戏中,当对局开始时,游戏开辟一块栈空间(固定大小)用于存放游戏某些数据,例如当栈空间为某某大小时,可以判定对局开始。
同时,通过栈底指针    ebp+”xxxx“的方式,还可访问栈内数据。
如,当访问到人物数据时,可根据人物数据完成人物透视功能的实现。

THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发
  • 管埋员

    昵称

  • 取消
    昵称