是什么意思
jz $+2
(这是IDA输出。)
#1 楼
在这种情况下,美元符号表示“当前头寸”。这是该指令开始的位置,然后加上两个字节。该指令是两个字节,因此它跳转到该指令之后的下一条指令。实际上是垃圾。#2 楼
当零标志== NULL时,从当前位置向前跳转两个字节。此
74 00
的操作码为两个字节seg000:00000000 74 00 jz short $+2
seg000:00000002 74 00 jz short $+2
,因此有效地它将跳转到下一条指令是否满足条件
主要用于混淆的垃圾
评论
这也可能表示该配置中不存在条件编译的代码(可能是在调试模式下,在某些情况下会显示一条消息,分支会跳过它)。
–彼得·弗里
13年8月5日在20:33
在switch语句中,它也以大量未优化的代码(例如1990 16bit x86游戏代码)存在,其中最后一项也“跳到结尾”,即使它已经在结尾了。
– Simeon朝圣者
13年10月10日,下午3:57
特别是在较旧的MS-DOS程序中,此类语句通常在inb / outb指令之间使用,以便给比处理器慢的外部硬件留出一些时间。
–贡特拉姆·布洛姆(Guntram Blohm)
2014-12-28 14:58
在6502的某些汇编器上,符号*表示当前指令的起始地址,而$表示下一条指令的地址。因此,BNE * -3或BNE $ -5将循环到在BNE之前3个字节开始的一条指令,而BEQ * + 2或BEQ $将执行相同的下一条指令,无论条件是否为真,但要花费额外的周期如果设置了Z标志(请注意,分页符是根据分支之后指令的地址来测量的,那么BEQ $将永远不会为分页符花费额外的周期。)
–超级猫
20 Dec 4'在22:36