assembly - 在 x86_64 中使用 Frame 指针而不是 Stack 指针
问题描述
使用 GCC 将简单的 C 代码编译成程序集将具有以下输出:
...
13 xorl %eax, %eax
14 movl $0, -4(%rbp)
15 movl $5, -8(%rbp)
16 movl $6, -12(%rbp)
17 movl -8(%rbp), %ecx
18 addl -12(%rbp), %ecx
19 movl %ecx, -16(%rbp)
20 popq %rbp
21 retq
我的问题是,为什么要使用偏移量frame base pointer (rbp)
而不是操纵stack pointer (rsp)
. 这不是拥有堆栈指针的全部意义吗?
如果这个进程的堆栈被其他进程(例如垃圾收集)覆盖,甚至不知道堆栈正在被使用,因为rsp
在写入值时不会递减。
解决方案
推荐阅读
- html - 图像在 Firefox 中看起来不太好,因为它在 chrome 中看起来
- pandas - 基于多条件 pandas 的 Groupby 聚合
- mysql - 使用 GROUP_CONCAT 时如何从另一个表中输出列
- android - android - 以编程方式设置键盘语言输入
- javascript - 如何访问数组内的嵌套对象来验证它?
- c# - OnAuthorizationAsync 中的 Cancellationtoken
- javascript - 无效的组件名称:“pages/product/_slug.vue”。组件名称应符合 html5 规范中的有效自定义元素名称
- excel - 执行从 1 到 LastRow 的循环
- android - 如何在 Android 10 (Android Q) 中隐藏作用域目录的子文件夹?使用媒体商店?
- php - 未捕获的错误:调用未定义的函数 odbc_connect()