跳转指令记录
虽然zf,cf这些才是正确的跳转指令使用方法,但是我太菜了,还是用这个经验主义判断方法。
je jump equal
cmp %eax ,%edx
je 0x12345678
je就是,如果前面的相等就跳转到后面的地址。
je 跳转指令,条件:ZF=1
test 用于判断一个数字是否为0
比如 :
test %eax,%eax
jg 0x12345678
这里的test做了逻辑与运算
当且仅当%eax为0,也就是说%eax当中每一位都为0时,与自身相与的结果才能是0。那么就会设置ZF=1。
jg 跳转指令,条件:ZF=0 和 SF=OF,所以说这里%eax为0时不会跳转
jle jump less than
Cmpl $0x5 ,-0x4(%ebp)
Jle <phase_2+33>
如果后面的小于等于前面的就跳转
jg jump greater ?????????
Compl 0x1,ssss
Jg <phase_3+67> //如果$0x1大于后面的就跳转
可以确定
cmp $0x5 ,%eax
jg 0x8048c92
只有当%eax<=5的时候才不会跳转
也就是前面的严格小于后面的就跳转
ja
Cmpl $0x7 ,-0x14(%ebp)
Ja <phase_3+146>
如果前面的大于等于后面的就不跳转
switch 跳转表
Mov 0x8049968(,%edx,4),%eax
Jmp *%eax
0x8049968是跳转表在memory中的存储位置