为什么在组装的CALLEE中“ PUSH EBP”和“ MOV EBP,ESP”?

阿图尔·格雷(Artur Gray)

为什么将我们push ebp作为Assembly函数的Callee中的第一个动作?

我知道然后我们可以使用mov edi, [ebp+8]传入的变量,但是我们esp已经指向了Caller函数的返回地址。我们可以轻松地访问传入的变量,方法是使用mov edi, [esp+4]或如果我们推送Callee寄存器,则访问mov edi, [esp+16]

那么,为什么要在ebp以后必须在功能中管理的cpu(the )中拥有额外的寄存器呢?IE

push ebp
mov ebp, esp

...

mov esp, ebp
pop ebp
雷米·勒博

在被调用方内建立新的堆栈框架,同时保留调用方的堆栈框架。堆栈框架允许使用相对于EBP函数中任何位置的固定偏移量一致地访问传递的参数和局部变量,同时可以在函数运行时ESP自由根据需要继续对其进行修改。ESP是一个移动目标,因此ESP根据函数使用堆栈的方式,即使不是不可能,使用相对于动态偏移量访问参数和变量也可能很棘手。创建堆栈框架通常更安全,但要花一些字节的堆栈空间来保存指向调用者堆栈框架的指针。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么GCC无法优化功能序言和结尾(push ebp; mov ebp,esp; ...; pop ebp)

来自分类Dev

为什么GCC无法优化功能序言和结尾(push ebp; mov ebp,esp; ...; pop ebp)

来自分类Dev

什么是ESP和EBP寄存器?

来自分类Dev

在此程序中解释esp-ebp

来自分类Dev

在此程序中解释esp-ebp

来自分类Dev

反汇编代码中的ebp和esp是什么意思?

来自分类Dev

当我将%esp移至%ebp时会发生什么?

来自分类Dev

为什么我的32位服务器中的ESP比python的EBP大?

来自分类Dev

计算保存的ebp,eip和当前ebp

来自分类Dev

基于ebp的寻址和esp寻址之间的区别

来自分类Dev

为什么要使用push / pop而不是sub和mov?

来自分类Dev

What does ebp and esp in a disassembly code mean?

来自分类Dev

为什么x86体系结构使用两个堆栈寄存器(esp; ebp)?

来自分类Dev

LEA指令“ => 0xb48daed9 <+3479>:lea -0xc(%ebp),%esp”的含义是什么?

来自分类Dev

直接推送常量或Mov Eax和Push Eax

来自分类Dev

在[剥削的艺术]示例中由[ebp-0xc]而不是[ebp-4]混淆

来自分类Dev

mov bl在组装中做什么

来自分类Dev

为什么gdb中的“信息寄存器ebp”不显示十进制数字?

来自分类Dev

堆栈溢出损坏%ebp

来自分类Dev

为什么进行上下文切换时Linux为什么保存%ebp?

来自分类Dev

组装MOV指令

来自分类Dev

组装MOV指令

来自分类Dev

组装-mov的单位变量?

来自分类Dev

为什么我的调试器显示[LOCAL.8]而不是[EBP-20]

来自分类Dev

为什么我的调试器显示[LOCAL.8]而不是[EBP-20]

来自分类Dev

为什么不在ebp以上捕获陷阱堆栈,以避免溢出攻击?

来自分类Dev

x64和SSE中mov宽度的语义

来自分类Dev

为什么gcc会生成“回音-8240(%ebp),%eax; cmpl $ 1,%eax; ja XXX”而不是jmp指令?

来自分类Dev

汇编,尝试推送%ebp时出错

Related 相关文章

  1. 1

    为什么GCC无法优化功能序言和结尾(push ebp; mov ebp,esp; ...; pop ebp)

  2. 2

    为什么GCC无法优化功能序言和结尾(push ebp; mov ebp,esp; ...; pop ebp)

  3. 3

    什么是ESP和EBP寄存器?

  4. 4

    在此程序中解释esp-ebp

  5. 5

    在此程序中解释esp-ebp

  6. 6

    反汇编代码中的ebp和esp是什么意思?

  7. 7

    当我将%esp移至%ebp时会发生什么?

  8. 8

    为什么我的32位服务器中的ESP比python的EBP大?

  9. 9

    计算保存的ebp,eip和当前ebp

  10. 10

    基于ebp的寻址和esp寻址之间的区别

  11. 11

    为什么要使用push / pop而不是sub和mov?

  12. 12

    What does ebp and esp in a disassembly code mean?

  13. 13

    为什么x86体系结构使用两个堆栈寄存器(esp; ebp)?

  14. 14

    LEA指令“ => 0xb48daed9 <+3479>:lea -0xc(%ebp),%esp”的含义是什么?

  15. 15

    直接推送常量或Mov Eax和Push Eax

  16. 16

    在[剥削的艺术]示例中由[ebp-0xc]而不是[ebp-4]混淆

  17. 17

    mov bl在组装中做什么

  18. 18

    为什么gdb中的“信息寄存器ebp”不显示十进制数字?

  19. 19

    堆栈溢出损坏%ebp

  20. 20

    为什么进行上下文切换时Linux为什么保存%ebp?

  21. 21

    组装MOV指令

  22. 22

    组装MOV指令

  23. 23

    组装-mov的单位变量?

  24. 24

    为什么我的调试器显示[LOCAL.8]而不是[EBP-20]

  25. 25

    为什么我的调试器显示[LOCAL.8]而不是[EBP-20]

  26. 26

    为什么不在ebp以上捕获陷阱堆栈,以避免溢出攻击?

  27. 27

    x64和SSE中mov宽度的语义

  28. 28

    为什么gcc会生成“回音-8240(%ebp),%eax; cmpl $ 1,%eax; ja XXX”而不是jmp指令?

  29. 29

    汇编,尝试推送%ebp时出错

热门标签

归档