assembly - 为什么编译器不使用 ENTER 和 LEAVE 指令?
问题描述
阅读程序的反汇编,我注意到了一个模式。在设置函数的框架时,enter
很少使用该指令。我还将编译器资源管理器与最新的 GCC 一起使用 - GCC 不使用enter
但使用leave
.
为什么不使用指令enter
?为什么编译器使用两条或更多指令来执行可以在一条指令中完成的操作?(推 rbp,保存 rsp,并使用sub rsp
,而不是使用enter 0x20, 0
)在堆栈上分配。但是leave
被使用了......还有其他leave
我不知道的东西吗?据我所知,leave
相当于
mov ebp, esp
pop ebp
GCC 使用leave
,而 MSVC 没有。我不明白为什么enter
从未使用过,leave
有时会使用。
解决方案
推荐阅读
- c++ - 通过野兽网络套接字发送二进制数据(在 C++ 中)
- c++11 - 归并排序的归并功能的分段错误
- apache-spark - 无法使用 spark 访问 hive
- html - 可以访问网络摄像头,无法显示视频
- gulp - 升级到 Gulp 4 后实时重新加载无法正常工作
- reactjs - 使用react cdn时如何在react中使用export
- javascript - 正则表达式匹配但返回 null
- events - 有没有办法使用像redis这样的持久性数据库来延迟特定时间?
- python - Python将字符串解析为字典
- python - PySide2 加载和创建组件时发生了什么?