我遇到了这些说明:
...
...
get:
lodsb
xor eax,ebx
stosb
loop get
push esp
pop esi
int3
我看到这会加载一个字节执行异或并将字节存储在循环中,它会这样做直到 ECX = 0。我的问题是程序如何知道继续push esp
指令?这仅仅是循环块语法所暗示的吗?
loop
指令的名称可能有点误导。 你可能会相信它所做的只是跳到给定的标签,但想想看:如果它只是一个跳跃,那么loop
和所有其他jmp
指令之间有什么区别?
事情的真相是,loop
不仅仅是一次跳跃。 它执行以下两项操作:
- 它递减 ecx 寄存器。
- 如果递减的结果不为零,则跳转到给定的标签。
因此,如您所见,它非常适合循环,这就是为什么它被称为 loop
.