gpt4 book ai didi

gcc - 冗余组装说明?

转载 作者:行者123 更新时间:2023-12-04 23:09:02 27 4
gpt4 key购买 nike

最近我一直在尝试学习逆向工程。因此,我一直在钻研大量的汇编代码。我对以下内容感到困惑:

movq    %rax,0xf8(%rbp)
movq 0xf8(%rbp),%rax

我已经看过好几次了。不是多余的吗?编译器为什么要这样做?我正在查看的二进制文件是用 gcc 编译的。

最佳答案

您可能在没有优化的情况下编译 (-O)。您所看到的是中间表示的直接、幼稚的翻译。像这样的片段通常是由于值存储在局部变量中,在这种情况下是 0xf8(%rbp)。然后立即使用该值,因此它再次将其加载到寄存器 %rax 中。优化器会发现从 %rax 存储只是为了恢复到相同的寄存器是多余的,并完全删除序列。如果所有优化阶段都失败了,至少有一个窥视孔会发现这两条指令是连续的。

如果您确实打开了优化,那么这确实很奇怪,但是如果您发布更大(但不是太大)的序列,可能会得到解释。仍然有很多情况会产生明显次优的东西,但没有比这更明显的了。

关于gcc - 冗余组装说明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5074447/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com