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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


                              


      

      
                              

qq06314488 发表于 2021-7-13 22:24

都忘的差不多了:rggrg

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

这个学的人越来越少了,学破解的,必须
页: [1] 2
查看完整版本: 滴水汇编第七天