常用的jcc指令表
1.修改eip的指令
1)jmp
寄存器EIP的值为程序将要执行的下一条指令的地址;
jcc指令本质上是修改EIP的值;
不能用mov指令直接修改eip的值,如果想修改eip的值需要用专用的指令,例如jmp;
格式:jmp r/imm
2)call
和jmp差不多,也是修改eip的值;
不同点是:call会同时将下一行指令的地址压入栈顶;
格式:call r/imm
3)ret
ret用来跳转到call后面一条指令处;
相当于pop eip;
2.比较指令
比较指令用来修改标志寄存器的值,但不会修改比较的数的值;
比较指令经常和条件跳转指令搭配使用;
1)cmp
格式:cmp r/m,r/m/imm
注意:逗号两边不能同时为内存地址;
作用:比较两个操作数,相当于sub指令,相减的结果不保存到第一个操作数中;
但是会根据结果修改相关标志寄存器的值;
常用:通过观察cmp执行后zf的值,判断两个数是否相等;
2)test
格式:test r/m,r/m/imm
作用:两个数做and运算,不保存结果,但根据结果修改标志寄存器;
常用:
test eax,eax;可以查看zf标志位,如果为1则eax的值为0;