gpt4 book ai didi

assembly - 为什么我们在汇编的CALLEE中出现 "PUSH EBP"和 "MOV EBP, ESP"?

转载 作者:行者123 更新时间:2023-12-02 09:10:53 24 4
gpt4 key购买 nike

我们为什么push ebp作为汇编函数的被调用者中的第一个操作?

我明白了,那么我们使用mov edi, [ebp+8]获取传入的变量,但是我们的 esp已经指向调用者函数的返回地址。我们可以使用 mov edi, [esp+4] 轻松访问传入的变量或者如果我们压入被调用者寄存器,则 mov edi, [esp+16] .

那么,为什么 CPU 中有额外的寄存器( ebp ),您稍后必须在函数中管理它?即

push ebp
mov ebp, esp

...

mov esp, ebp
pop ebp

最佳答案

它正在建立一个新的stack frame在被调用者内部,同时保留调用者的堆栈帧。堆栈帧允许使用相对于函数中任何位置的 EBP 的固定偏移量来一致地访问传递的参数和局部变量,而 ESP 可以在函数运行时根据需要自由地继续修改在跑。 ESP 是一个移动目标,因此使用相对于 ESP 的动态偏移量访问参数和变量可能会很棘手(如果不是不可能的话),具体取决于函数如何使用堆栈。创建堆栈帧通常更安全,但代价是使用几个字节的堆栈空间来保存指向调用者堆栈帧的指针。

关于assembly - 为什么我们在汇编的CALLEE中出现 "PUSH EBP"和 "MOV EBP, ESP"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36046201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com