Mon*_*nad 5 macos x86 assembly x86-64 clang
(使用Apple LLVM version 8.1.0 (clang-802.0.42) Target: x86_64-apple-darwin16.6.0)
当反汇编编译的一些代码时-O2,我注意到它们中的很多都有一个看似不必要的保存和恢复基指针rbp,通常看起来像下面的
pushq %rbp
movq %rsp, %rbp
...
popq %rbp
Run Code Online (Sandbox Code Playgroud)
我知道这将是什么,但它似乎甚至在似乎完全没有必要的情况下使用,例如在下面的反汇编的复杂身份函数中由 objdump
__Z8identityI5arrayIiLm2EEET_S2_:
60: 55 pushq %rbp
61: 48 89 e5 movq %rsp, %rbp
64: 48 89 f8 movq %rdi, %rax
67: 5d popq %rbp
68: c3 retq
69: 0f 1f 80 00 00 00 00 nopl (%rax)
Run Code Online (Sandbox Code Playgroud)
其中只有两个有意义的指令来自移动rdi到rax(第一自变量返回寄存器)和明显必要retq(I假设nopl为填充或对准用于任何如下).
这种看似不必要的背景保存是否有原因?
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |