我有一段使用 JNZ 的代码。当我组装和链接二进制文件时,我看到我的 JNZ 被 JNE 替换。据我了解,它们两者基本上是相同的。但是为什么 NASM 会改变它呢?
此外,是否有任何配置选项可用于阻止在组装时发生这种变化?
我有一段使用 JNZ 的代码。当我组装和链接二进制文件时,我看到我的 JNZ 被 JNE 替换。据我了解,它们两者基本上是相同的。但是为什么 NASM 会改变它呢?
此外,是否有任何配置选项可用于阻止在组装时发生这种变化?
我了解它们两者本质上是相同的
JNE
并且JNZ
具有相同的操作码(0x75
用于短跳转和0x0f 0x85
近跳转),因此汇编程序将为它们创建相同的机器代码。
反汇编时,反汇编程序不再知道源中使用了哪一个,它必须取其中一个。
此外,是否有任何配置选项可用于阻止在组装时发生这种变化?
不,因为它不是真正的“替代品”——JNE
只是JNZ
相同操作码的不同助记符。
JNZ
并JNE
具有完全相同的编码(请参阅英特尔® 64 和 IA-32 架构软件开发人员手册第 2A 卷 3-419)。因此,无论您在汇编器中使用哪一个,反汇编器都会选择一个并在反汇编代码中使用相同的符号。