吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2703|回复: 11
收起左侧

[学习记录] 滴水汇编第七天

[复制链接]
Insist_2020 发表于 2021-7-13 22:09
本帖最后由 Insist_2020 于 2021-7-25 12:31 编辑

转移指令(JCC)
1.JMP指令:无条件转移指令(修改EIP的值)
               <1>16位CPU的JMP指令的分类:
                       jmp short 标号 功能为:段内短转移   (IP)=(IP)+8位位移
                       (1)8位位移=标号处的地址-jmp指令后的第一个字节地址
                       (2)short指明的此处是8位位移
                       (3)8位位移的范围为-128-127,用补码表示
                       (4)8位位移是编译程序时在编译时算出的

                      jmp near ptr 标号 功能为:段内近转移 (IP)=(IP)+16位位移
                       (1)16位位移=标号处的地址-jmp指令后的第一个字节地址
                       (2)near指明的此处是16位位移
                       (3)16位位移的范围为-32768-32767,用补码表示
                       (4)16位位移是编译程序时在编译时算出的

                      jmp far ptr 标号 功能为:段间转移,far ptr指明了用标号的段地址(CS)和偏移地址(IP)
                       (1)修改CS:IP,让cpu指向目的地址,这是直接给出目的地址,不是根据位移

               <2>32位CPU的JMP指令的分类:               
                       (1)near,short与16位的本质相同
                      jmp far ptr 标号
                       (1)32位位移=标号处的地址-jmp指令后的第一个字节地址
                       (2)far指明的此处是32位位移
                       (3)32位位移的范围为-2147483648-2147483647(0x80000000-0x7FFFFFFF),用补码表示
                       (4)32位位移是编译程序时在编译时算出的

               <3>CPU执行指令的过程               
                       (1)从EIP处向内存单元读取指令,指令进入缓冲区
                       (2)EIP=EIP+指令的长度,CPU指向下一条指令
                       (3)执行指令,重复步骤1继续循环

               <4>JMP指令的格式:   
                       (1) JMP 寄存器/立即数/内存地址  ==> MOV EIP,寄存器/立即数/内存地址
                      screenshot-20210713-210048.png
2.CALL/RET指令:共同用来实现子程序的设计
                      (1)CALL 地址A/寄存器    ==>   PUSH 当前EIP(CALL下一条指令的地址;不理解可以查看上面的CPU执行指令的过程
                                                                             MOV EIP,地址A/寄存器 ==> JMP 地址A/寄存器 (CALL指令实现转移的方法和jmp指令的原理相同
                            screenshot-20210713-211859.png

                     (2) RET    ==>  LEA ESP,[ESP+4]  ==> POP EIP
                                                  MOV EIP,[ESP-4] ==> JMP [ESP-4]      
                      screenshot-20210713-213242.png
2.CMP/TEST指令
               <1>CMP指令:该指令是比较两个操作数,实际上,它相当于SUB指令,但是相减的结构并不保存到第一个操作数中。                        
                                        只是根据相减的结果来改变零标志位的(AF CF OF PF SF ZF)当两个操作数相等的时候,ZF标志位置1。指令格式:CMP  R/M,R/M/IMM
                     (1) CMP 寄存器,寄存器:两个寄存器数据宽度必须一致
                        image.png

                     (2) CMP 寄存器,立即数:寄存器宽度与立即数的数据宽度必须一致
                        image.png

                     (2) CMP 寄存器,内存:寄存器宽度与内存宽度必须一致
                      image.png

               <2>TEST指令:该指令在一定程序上和CMP指令时类似的,两个数值进行与操作,结果不保存,但是会改变相应标志位(CF OF PF SF ZF)指令格式:TEST  R/M,R/M/IMM
                     (1)常见用法:用这个指令,可以确定某寄存器是否等于0。例如:TEST EAX,EAX(观察Z位)
                        image.png

2.JCC指令:指条件跳转指令,CC就是指条件码
               <1>JE/JZ指令:结果为零则跳转(相等时跳转);ZF=1
                image.png

               <2>JNE/JNZ指令:结果不为零则跳转(不相等时跳转);ZF=0
                   image.png

               <3>JS指令:结果为负则跳转;SF=1
                   image.png

               <4>JNS指令:结果为非负则跳转;SF=0
                   image.png


               <5>JPE/JP指令:结果最低字节中1的个数为偶数则跳转        ;PF=1
               image.png

               <6>JNP/JPO指令:结果最低字节中1的个数不为偶数则跳转;PF=0
               image.png

               <7>JO指令:结果溢出了则跳转;OF=1
                   image.png

               <8>JNO指令:结果没有溢出则跳转;OF=0
               image.png

               <9>JB/JNAE指令:小于则跳转 (无符号数);CF=1
               image.png

               <10>JAE/JNB指令:大于等于则跳转 (无符号数);CF=0
               image.png
                  
               <11>JBE/JNA指令:小于等于则跳转 (无符号数);CF=1 or ZF=1
               <12>JA/JNBE指令:大于则跳转(无符号数);CF=0 and ZF=0

               <13>JL/JNGE指令:小于则跳转 (有符号数);SF≠ OF
                image.png

               <14>JNL/JGE指令:大于等于则跳转 (有符号数);SF=OF
                image.png

               <15>JLE/JNG指令:小于等于则跳转 (有符号数);ZF=1 or SF≠ OF
               <16>JG/JNLE指令:大于则跳转(有符号数);ZF=0 and SF=OF
  

                                


        

        
                                

免费评分

参与人数 5吾爱币 +3 热心值 +4 收起 理由
shen54188 + 1 + 1 谢谢@Thanks!
tlf + 1 热心回复!
tgdq5 + 1 热心回复!
Wsoldier + 1 + 1 谢谢@Thanks!
sdaza + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

qq06314488 发表于 2021-7-13 22:24
都忘的差不多了
StevenYwh 发表于 2021-7-14 00:05
头像被屏蔽
tl;dr 发表于 2021-7-14 07:23
EnterpriseSolu 发表于 2021-7-14 07:34
一看汇编就像是回来了远古时代,上世纪90年代,现在的硬件(CPU,内存,主板)技术已经革新了好几代,软件也更新了几个大版本,x64 已经成为主流计算机平台,我个人认为,随便折腾点新技术,总比去啃古老技术要容易,找工作或是玩技术,个人兴趣爱好另外别论
aswcy815174418 发表于 2021-7-14 08:03
EnterpriseSolu 发表于 2021-7-14 07:34
一看汇编就像是回来了远古时代,上世纪90年代,现在的硬件(CPU,内存,主板)技术已经革新了好几代,软件也 ...

API调用大师?不去学底层,学得明白?
linhzye 发表于 2021-7-14 08:25
感谢分享滴水这个名字起的好,水滴石穿,学无止境
arg10 发表于 2021-7-14 08:46
看不懂、、、
头像被屏蔽
tlf 发表于 2021-7-14 08:56
提示: 作者被禁止或删除 内容自动屏蔽
hong_sun 发表于 2021-7-14 09:03
这个学的人越来越少了,学破解的,必须
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 01:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表