我有一段使用JNZ的代码。当我汇编并链接二进制文件时,我看到我的JNZ替换为JNE。据我所知,两者基本相同。但是为什么NASM会改变它呢?
此外,是否有任何配置选项可以阻止此更改在组装时发生?
答案 0 :(得分:9)
据我所知,两者基本相同
JNE
和JNZ
有same opcodes(短暂跳跃0x75
和近跳跃0x0f 0x85
,因此汇编程序会创建两个机器代码相同。
拆卸时,反汇编程序不再知道在源中使用了哪一个,而且必须使用其中一个。
此外,是否有任何配置选项可以阻止此更改在组装时发生?
不,因为它不是真正的“替代” - JNE
和JNZ
只是相同操作码的不同助记符。
答案 1 :(得分:1)
JNZ
和JNE
具有完全相同的编码(请参阅英特尔®64和IA-32架构软件开发人员手册第2A卷3-419)。无论你在汇编程序中使用哪一个,反汇编程序都会选择一个并在反汇编代码中使用相同的表示法。