为什么编译器不使用 ENTER 和 LEAVE 指令?
Why are the instructions ENTER and LEAVE not used by compilers?
阅读程序的反汇编时,我注意到了一种模式。在设置函数的框架时,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
。
阅读程序的反汇编时,我注意到了一种模式。在设置函数的框架时,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
。