栈学习

Posted zuoanfengxi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈学习相关的知识,希望对你有一定的参考价值。

技术图片

以上是帧指针的示意图:下面是函数调用的示意图


技术图片

字节差取决于程序位数,32位为4,64位为8


技术图片

push ebp
mov  ebp,esp    //接下来开辟栈空间,和保存寄存器值,后者赋值前者

技术图片

i386函数的标准进入和退出指令序列
push ebp
mov  ebp,esp
sub esp,x  //开辟栈空间,x个字节数 
push [reg1]
。。。。
push [regn]//保存必要参数
。。。。。。。//函数的实际内容
pop [regn]
。。。。
pop[reg1]
mov esp,ebp
pop ebp //两句经常用leave指令代替
ret  //取ebp之下的ret_address 返回(强调:这里指中整个函数结束后,如果此值被修改,只会在函数运行到ret是起作用,如'aaaa'则可能之前函数流程就被挟持,在之前就已经得到flag,之后返回不返回main意义不大)

以上是关于栈学习的主要内容,如果未能解决你的问题,请参考以下文章

IOS开发-OC学习-常用功能代码片段整理

java SpringRetry学习的代码片段

python 机器学习有用的代码片段

学习笔记:python3,代码片段(2017)

python学习笔记012——pdb调试

学习 PyQt5。在我的代码片段中找不到错误 [关闭]