汇编_JCC指令

CF进位的具体补充

例如80-40不进位。因为不是最高位进位或借位,而是最高位前一位进位

bf03954cbe9b44eb83dc4d14d535aa67.png

例如:80-81会进位,cf为1,因为最高位为 387f5699ea874deea98b52e465bb7ae8.png

PE指令补充:

只看最低有效位节,后8位(不管是32位,还是16位,8位都只看后8位)。若1的个数是偶数就是1否则为0

c322f48d7c3f4bc7ac2b4574f4ef8407.png

OF指令补充(针对有符号数):

eff7ed2e31b141378fae7ffa40776acf.png

 符号位有进位,最高有效位进位,进位为1,没进微信为0,最后of值为两者异或运算后的值。

注意:先指明是有符号还是无符号,没指明默认有符号

断点

设置断点,让cpu一条一条指令的来执行

如何修改EIP值

jmp指令:

8b3cae31e87b495987ea4b3e5a64af39.png

 short如果调转的地方离它小于128个字节,会加上

jmp指令只修改ip值并且只影响ip值不影响堆栈个寄存器,使其改变,cpu根据修改后的ip值来跳转执行指令。

9481e5a3927c4e92b224f6cde1c5d950.png

 补充:od打开文件跳出错误提示(下了什么不该下的断点什么的)

打开od文件夹找的udd(缓存)删掉

f1d795ca6af44cbfa8b075eef96545f6.png

以下全删掉 f17d5e43ab4f4a9eab89285b28798e9a.png

 call指令

da83a6d6c7ed47b0b05878cf5f649e00.png

 要跳的地方也要下一个断点,让程序运行到此时停下,选中后F2完成下断点。bad77777d6084afdae9b13699b8c3ad4.png

注意

1: call与jmp都修改eip的值,但call会将原地址的下一条指令地址压入栈内(call一会还要回去)(上一个地址+有几个字节=下一个地址,例如4183F8+一个字节=4183F9。

2:call会回到原地址,但jmp不会()如下,从跳到的地址又回到原地址的下一条指令的地址处

9f32b967746d493a8f4ebcc9c5a0f75a.png

 retn指令:与call指令成对出现相当于pop eip(但不能这样写,这不是正确的指令。

CMP指令

cmp是比较指令,与sub相比只改标志寄存器的值(比较两个数可以用相减的方法,但此方法会改变原来寄存器的值,此时使用cmp指令)cmp比较后相等,看zf位.相等为1,不相等时,看sf位,sf位为1表明第一个数比第二个数小。

09ccd8be7d4646c2b86a6dfb9db214fb.png

 cmp指令也可以比较寄存器和内存(但要两者宽度相等)

TEST指令

观察z位,如果每一位都为0的话,z位为1。

c7b53f9b28d3416c9f84281c5d3ac334.png

 db0bfa453f4747e1837f6a71c7795ef0.png

 JE(JZ)指令

指令的含义是如果相等或是0

5760dd9e518a44f9b0bdb3f100ca8aca.png

 52c761dd9e974233b84cbb6a865cb42f.png

 cmp指令的执行会引起标志寄存器的数值的改变,je(jz)的指令执行只取决于标志寄存器的值

其他JCC指令

1:JNE,JNZ     结果不为零则跳转(不相等是跳转)               SF=1

2:JS               结果为负则跳转                                             SF=1

3:JNS            结果为非负则跳转                                       SF=0

4:JP,JPE     结果中1的个数为偶数则跳转                       PF=1

5:JNP,JPO   结果中1的个数不为偶数则跳转                  PF=0

6:JD                结果溢出跳转                                              OF=1

7:JND              结果不溢出跳转                                         OF=0

8:JB,JNAE     小于则跳转(无符号数)                          CF=1

9:JB,JNAE     大于等于则跳转(无符号数)                    CF=0

10:JBE,JNA     小于等于则跳转(无符号数)                  CF=1orZF=1

11:JNBE,JA     大于则跳转(无符号数)                             CF=0orZF=0

12:JL,JNGE    小于则跳转(有符号数)                            SF!=OF

13:JNL,JGE    大于等于则跳转(有符号数)                     SF=OF

14:JLE,JNG    小于等于则跳转(有符号数)                        ZF=1orSF!=OF

15:JNL,JG      大于则跳转(有符号数)                             ZF=0 and SF=OF

注意:JCC指令是另一种JMP指令(即不会影响对战和寄存器),指令是否执行取决于标志寄存器的值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值