5

我有一段使用 JNZ 的代码。当我组装和链接二进制文件时,我看到我的 JNZ 被 JNE 替换。据我了解,它们两者基本上是相同的。但是为什么 NASM 会改变它呢?

此外,是否有任何配置选项可用于阻止在组装时发生这种变化?

4

2 回答 2

11

我了解它们两者本质上是相同的

JNE并且JNZ具有相同的操作码0x75用于短跳转和0x0f 0x85近跳转),因此汇编程序将为它们创建相同的机器代码

反汇编时,反汇编程序不再知道源中使用了哪一个,它必须取其中一个。

此外,是否有任何配置选项可用于阻止在组装时发生这种变化?

不,因为它不是真正的“替代品”——JNE只是JNZ相同操作码的不同助记符。

于 2013-02-11T06:35:28.243 回答
2

JNZJNE具有完全相同的编码(请参阅英特尔® 64 和 IA-32 架构软件开发人员手册第 2A 卷 3-419)。因此,无论您在汇编器中使用哪一个,反汇编器都会选择一个并在反汇编代码中使用相同的符号。

于 2013-02-11T06:38:31.987 回答