pop rbp 后存储在 [rbp-1] 中的值会发生什么变化

问题描述

我是汇编的新手,我通过将 c 代码编译为汇编来学习汇编。

对于这个 c++ 代码


int foo() {
    bool x = true;
    return 1;
} 

这是生成的汇编代码(intel语法)

foo():
        push    rbp
        mov     rbp,rsp
        mov     BYTE PTR [rbp-1],1
        mov     eax,1
        pop     rbp
        ret

您可以查看compiler explorer link here

在本说明中

        mov     BYTE PTR [rbp-1],1

我们将 1 存储在堆栈中,其地址为 [rbp - 1]

  mov    eax,1
  pop    rbp
  ret

这里我们将返回值设置为 1popping 堆栈并将其值存储在 rbp 中。

我怀疑我们如何将 1 存储在 [rbp - 1] 的地址中,因为 rsp 应该始终指向堆栈的顶部(在本例中为向下),在此指令之后 {{1} } 顶部应该是 mov BYTE PTR [rbp-1],1[rbp-1] 仍然指向 rsp

正确的代码不应该是这样的

rbp

这样 rsp 将始终指向顶部。

我的第二个疑问是 sub rsp,1 mov BYTE PTR [rbp - 1],1 之后存储在 [rbp-1] 中的值会发生什么变化。是否以某种方式自动清理。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...