Jar*_*sen 4 x86 assembly gcc reverse-engineering
最近我一直在努力学习逆向工程.因此,我一直在研究很多汇编代码.我对以下内容感到困惑:
movq %rax,0xf8(%rbp)
movq 0xf8(%rbp),%rax
Run Code Online (Sandbox Code Playgroud)
我已经好几次见过这个了.这不是多余的吗?为什么编译器会这样做?我正在看的二进制文件是用gcc编译的.
您可能编译时没有优化(-O).您所看到的是中间表示的直接,天真的翻译.像这样的片段通常是由于值存储在局部变量中,在这种情况下为0xf8(%rbp).然后立即使用该值,因此将其再次加载到寄存器%rax中.优化器将发现从%rax存储仅恢复到同一个寄存器是多余的并完全删除序列.如果所有优化阶段都失败,则至少窥视孔将发现这两个指令是连续的.
如果你确实打开了优化,那么这确实很奇怪,但如果你发布一个更大(但不是太大)的序列,可能会解释.还有很多案例会产生一些明显不太理想的东西,但没有那么明显.
| 归档时间: |
|
| 查看次数: |
289 次 |
| 最近记录: |