算术移位零位的目的是什么?

逆向工程 拆卸 x86 C++
2021-06-10 13:51:40

在最近的一个作业中,我反汇编了一个用 C++ 编写的二进制文件。
在整个程序的几个地方,我遇到了如下所示的零位移位操作(确切的代码/IDA 目前不在我面前)。移位操作都在条件分支之前。

...
call sub_123456
add esp, 8
shr eax, 0
cmp ...
jz ...

我对汇编有很好的理解,但我不明白你为什么要做零位偏移。这本质上不是NOP吗?我一直在寻找这方面的信息,但还没有找到任何明确的信息。我的猜测是编译器出于某种原因添加了它,但我想了解原因。作业已经提交;这只是一个一直困扰着我的问题。任何输入将不胜感激!

谢谢

1个回答

也许优化编译器希望下一条指令在 4 字节边界上开始,例如,如果下一条指令是内部循环中跳转的目的地。也许这个 3 字节指令比三个连续的 1 字节 NOP 快。