今天俺也用OD(OllyDbg)反汇编了个小软件,其中里面有下面两条指令:
没太明白什么意思,google一下,在看雪论坛上发现了一个大虾的解释很详细,记录一下:
补充: 2.je/jz 是 当运算结果为0时则跳,也就是当EFLAGS中的ZF标志为1时跳转。ZF标志为1,说明上一次运算(不管是算术运算还是逻辑运算)结果为0,而ZF为0,说明运算结果非0。 那 test eax,eax 放到这程序里面对于验证是否注册有什么意义呢?为什么要检测这个值是不是零呢? 因为EAX中是前一步的计算结果(比如验证是否成功),要判断验证是否成功,当然就等于判断EAX中的值了。当然,理论上不一定要和0比较,也可以进行其它的判断,但在这种情况下通常是一种bool型的值,在C中没有bool这种类型,而是把0作为false,把任何非0值作为true,所以这里就要判断它是true还是false,也就是判断它是不是为零了。 |
转自:
http://hi.baidu.com/felixzxh/blog/item/bb7c8ec910f6491f7e3e6f54.html