美文网首页CTF从入门到精通ctfCTF
esp和ebp的在函数调用时的行为

esp和ebp的在函数调用时的行为

作者: taiji1985 | 来源:发表于2018-08-22 20:32 被阅读11次

首先,高级语言的栈是从高地址向低地址增长的,为什么这样?

代码啥的在低地址,栈在高地址,这样就会向中间增长。

esp永远指向栈顶元素。不是指向没有数据的空地址。

push时,先减四后赋值

ebp永远指向栈底元素。他一般存储了上一个函数的ebp。

进入函数中,先push ebp

再mov ebp,esp 这时俩寄存器都指向保存的上个函数的ebp的值。

下面esp减去一大块,为临时变量流出空间。

离开函数时执行

leave时,他的作用与上面的相反,相当于

mov esp,ebp  让esp指向当前的栈底

pop ebp 将栈顶(esp指向的内存)的值给ebp这样,就恢复了上个函数调用此函数至少得值,esp因为弹栈而加四,然后指向的是返回地址。

随后执行ret,ret指令相当于

pop eip 即将栈顶的值(esp指向的内容)复制给eip指令寄存器。esp+4

相关文章

  • esp和ebp的在函数调用时的行为

    首先,高级语言的栈是从高地址向低地址增长的,为什么这样? 代码啥的在低地址,栈在高地址,这样就会向中间增长。 es...

  • 缓冲区溢出攻击

    调用函数(caller)和被调函数(callee)在栈中的内存变化。 寄存器esp,eip,ebp的基本作用。 什...

  • Linux内核原理初窥

    函数堆栈 esp栈顶指针 ebp栈基址指针call:将ebp压栈,并让ebp=espret:将esp=ebp,并将...

  • 函数调用栈

    函数调用过程 esp指向堆栈顶端,ebp指向old ebp,返回地址为ebp-4,参数为ebp-8,ebp-12。...

  • Vscode汇编调试出栈入栈—Apple的学习笔记

    调试方法:主要看esp(当前栈指针)和ebp(栈基地址),没进入一个函数ebp会变动为当前函数的基地址。 我是在w...

  • 理解函数的调用过程

    一、函数的范围 ebp寄存器指向函数的栈底,esp寄存器指向函数的栈顶,共同划分了函数的活动范围。减小esp的值相...

  • 栈中函数调用原理详解

    一、eip、ebp、esp介绍 EIP,EBP,ESP都是系统的寄存器,里面存储的是些地址,我们系统中栈的实现...

  • 8. 汇编-ESP寻址 EBP寻址

    8. 汇编-ESP寻址 EBP寻址 寄存器传参和堆栈传参 寄存器传参 堆栈传参 --ESP寻址 堆栈传参 --EBP寻址

  • 2.1ebp,esp与call

    CALL框架` EBP寄存器 栈底指针ESP寄存器 栈顶指针一、EBP栈底指针EBP是一个特殊的寄存器,通过EBP...

  • 程序为什么开头总是PUSH EBP(栈帧)

    子程序如何存取参数,对堆栈操作的寄存器有 ESP 和 EBP,而 ESP是堆栈指针,无法暂借使用,所以一般使用 E...

网友评论

    本文标题:esp和ebp的在函数调用时的行为

    本文链接:https://www.haomeiwen.com/subject/xafuiftx.html