版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。2019-09-06,21:59:16。
作者By-----溺心与沉浮----博客园
JCC指令决定它跳不跳转跟别的没关系,只跟EFLAG标志寄存器有关系!!!
1、JE, JZ 结果为零则跳转(相等时跳转) ZF=1
2、JNE, JNZ 结果不为零则跳转(不相等时跳转) ZF=0
3、JS 结果为负则跳转 SF=1
4、JNS 结果为非负则跳转 SF=0
5、JP, JPE 结果中1的个数为偶数则跳转 PF=1
6、JNP, JPO 结果中1的个数为偶数则跳转 PF=0
7、JO 结果溢出了则跳转 OF=1
8、JNO 结果没有溢出则跳转 OF=0
9、JB, JNAE 小于则跳转 (无符号数) CF=1
10、JNB, JAE 大于等于则跳转 (无符号数) CF=0
11、JBE, JNA 小于等于则跳转 (无符号数) CF=1 or ZF=1
12、JNBE, JA 大于则跳转(无符号数) CF=0 and ZF=0
13、JL, JNGE 小于则跳转 (有符号数) SF≠ OF
14、JNL, JGE 大于等于则跳转 (有符号数) SF=OF
15、JLE, JNG 小于等于则跳转 (有符号数) ZF=1 or SF≠ OF
16、JNLE, JG 大于则跳转(有符号数) ZF=0 and SF=OF
有符号无符号的区别:大家有兴趣可以去尝试一下
CMP AL,CL
JG 0x12345678
JA 0x12345678
这里我也不上图了,就简单列举一下,汇编指令的复习也就暂告一段落了,总算可以舒一口气了,虽然博文写了就十来篇,但笔者私底下的功课绝不止这么点,真的是要吐了。汇编的学习没别的,就是练,也不需要靠你去背,背来的东西迟早都会忘,但是忘的速度会很快。只有练到自己把自己恶心到,才能让自己把自己的功夫练到位!(当然笔者还没到那种境界,不然也不会重新来复习汇编了)真的!学汇编一定不要听信书上说的死记硬背!!!只有一句,忘死里练,练到把自己恶心得想锤爆电脑为止。
当然我说汇编学习告一段落,也不是说真不去碰汇编了,汇编会长期伴随着我,因为后面的堆栈图,C语言逆向,C++逆向,汇编是一直紧随的,而且还会有新的汇编指令再去学,只是换个方向去了解汇编了。
上面的JCC指令哗啦哗啦一摆一大堆,有人会问,靠!这怎么去记,这记得来么!如果你的英语有一点点底子的话,那恭喜你,完全不用去记了,去找大于,小于,等于,不等于英语单词就行,这些都是这英文单词的缩写。如果你英语差的话,也没事,反正都是跟if...else相关的,见多了,练多了,不用刻意去记,也会形成自然反射的记住的。
我下面借鉴他人文章,COPY这张表格,这张表格有JCC指令的英文单词全拼,可以帮助你更好的去理解JCC指令,注意结合我上面列出来的有符号的大于小于,和无符号的大于小于
指令 | 英文 | 中文 |
je | Equal | 等于 |
jne | Not Equal | 不等于 |
jg | Creater | 大于 |
jge | Creater or Equal | 大于等于 |
jng | Not Greater | 不大于 |
jnge | Not Greater or Equal | 不大于等于 |
jl | Less | 小于 |
jle | Less or Equal | 小于等于 |
jnl | Not Less | 不小于 |
jnle | Not Less or Equal | 不小于等于 |
ja | Above | 高于 |
jae | Above or Equal | 高于等于 |
jna | Not Above | 不高于 |
jnae | Not Above or Equal | 不高于等于 |
jb | Below | 低于 |
jbe | Below or Equal | 低于等于 |
jnb | Not Below | 不低于 |
jnbe | Not Below or Equal | 不低于等于 |
jpe | Parity Even | 校验为偶 |
jpo | Parity Odd | 检验为奇 |
版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。2019-09-06,21:59:16。
作者By-----溺心与沉浮----博客园
大家有兴趣可以尝试一下这道题,尝尝鲜。对JCC理解会有很好的帮助。
作业:使用汇编指令修改标志寄存器中的某个位的值,实现JCC的十六种跳转.
条件1、不允许在OD中通过双击的形式修改标志寄存器.
条件2、要通过汇编指令的执行去影响标志位,能用CMP和TEST实现的优先考虑.