跳转指令记录

虽然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中的存储位置

 

posted @ 2021-11-11 23:27  TheDa  阅读(347)  评论(0编辑  收藏  举报