【发布时间】:2017-01-04 01:01:46
【问题描述】:
我遇到了一个 x86 汇编器是这样的:
push eax
xor eax, eax
je label1
add esp, 4
label1:
pop eax
据我所知,xor 指令将始终保持 ZF 设置,这反过来又使 je 始终触发。这段代码是否等同于nop?
编译器会生成这个吗?如果是,为什么?
【问题讨论】:
-
可能有其他代码直接跳转
je或add指令,跳过xor。但它看起来不太可能,而且看起来不太可能某些高级语言编译器会生成这样的代码。 -
@Ped7g 不,没有其他代码跳转到这个 sn-p。
-
那么从执行的角度来看是没用的。 (它可能仍然通过指令操作码形成一些二进制数据,因此可能其他部分正在将那些
xor/je/add指令作为数据读取)。也可能是后来其他人修改代码的结果,没有源代码。或者其他什么,很难说 - 在组装整个二进制文件和目标平台时形成完整的上下文。您可能遗漏了一些小细节。 -
而不是
xor eax,eax,je在or eax,eax之后是有意义的,但其余的(add esp,4和pop eax)则不会。这段代码看起来很像以前不同,并且由于某种原因被修改了。 -
你在哪里遇到这个问题?你能提供一些上下文吗?
标签: assembly compilation x86