zoukankan      html  css  js  c++  java
  • 【Assembly】-NO.88.Assembly.2.滴水逆向.1.002-【位运算及基础指令】-

      1.0.0 Summary

    Tittle:【Assembly】-NO.88.Assembly.2.滴水逆向.1.002-【】-

    Style:Java

    Series:Log4j

    Since:2018-02-09

    End:2018-02-09

    Total Hours:30+

    Degree Of Diffculty:5

    Degree Of Mastery:5

    Practical Level:5

    Desired Goal:5

    Archieve Goal:3

    Gerneral Evaluation:3

    Writer:kingdelee

    Related Links:

    http://www.cnblogs.com/kingdelee/

    1.进制的理解

    3进制:

    7进制:

     

    2.进制的转换

     

    2.1

     

    八进制 +-*/
    1.加法----------------------------------
    	277
    +	333
    -----------------
    7+3:12          	------进1,留2
    -----------------
    7+3+1:13			------加上前一个进1计算,仍旧进1,留3
    -----------------
    2+3+1:6				------留6
    -----------------
    632					------以上留位拼接
    
    2.减法----------------------------------
    	236
    -	 54
    -----------------
    6-4:2				------留2
    -----------------
    3-5:6				------借1位,即3+8=11,11-5=6,留6
    -----------------
    2-1:1				------被借1,即2-1=1.
    -----------------
    162					------结果
    
    3.乘法----------------------------------
    	276
    *	 54
    -----------------
    6*4=30				------6+6=14+6=22+6=30,进3留0; 另一种算法:10:6*4=24, 24/8=3, 24+(24/8)*(10-8)=30;6+6=14+6=22+6=30
    -----------------
    4*7+3=37			------7+7=16+7=25+7=34,34+3=37,进3留7
    -----------------
    4*2+3=15			------4+4=10,10+3=13, 进1留3
    -----------------
    1370
    
    到276*5了;
    -----------------
    6*5=36				-------6+6=14+6=22+6=30+6=36
    -----------------
    7*5+3=46			-------7+7=16+7=25+7=34+7=43,43+3=46
    -----------------
    5*2+4=16			-------5+5=12+4=16
    -----------------
    1666
    
      	 1370
    +   1666
    -----------------
    0
    -----------------
    6+7=15
    -----------------
    3+6+1=12
    -----------------
    1+6+1=10
    -----------------
    1+1=2
    -----------------
    20250
    
    4.除法----------------------------------
    	234
    /	  4	
    -----------------
    反推:4+4=10+4=14+4=20, x=20<23<20+4=24,所以 得4余3
    -----------------
    反推:20+4=24+4=30+4=34		所以,得7整除
    -----------------
    47
    -----------------
    

      

     3.16进制是2进制的简写形式

    从0写到1111

     

    EE,BE,96即

    1111 1111,1011 1111, 1001 0110

    4.计算机宽度

     5.无符号数

    6.有符号数

    有符号数,为正数时,和无符号数规则一样

    为负数时,

    假设数据宽度为1 byte(8 bit)

     

     假设数据宽度为 Doubleword(32Bit)

    计算机是通过位运算实现 所有计算

    4+5 的运算过程 -----------------------------	
    
    
    
    		0000 0100
    		0000 0101
    +		---------
    		0000 1001
    		
    -----------------------------
    
    
    1)先得到异或结果,临时性的		
    		0000 0100 ---------# 1.1
    		0000 0101 ---------# 1.2
    异或	---------
    		0000 0001 ---------# 1.3
    
    2)再通过与运算 判断是否有进位
    如果没有进位的情况下,异或的结果与加的结果一样
    如果有进位,拿异或的结果与与的结果继续 异或
    
    
    			
    		0000 0100
    		0000 0101 
    与 		---------
    		0000 0100 ---------# 1.4
    		
    有1应进位:
    		0000 1000 ---------#1.4 -> #1.5
    
    		
    结果 存在1不全是0,说明有进位
    拿此结果与异或的结果相加
    
    3)继续异或
    拿异或的结果和与的结果 继续异或	
    	
    		0000 0001 --------- $ 1.3
    		0000 1000 --------- $ 1.5
    异或 		---------
    		0000 1001
    		
    4) 判断3)的与 是否有进位
    
    		0000 0001 --------- $ 1.3
    		0000 1000 --------- $ 1.5
    与 		---------
    		0000 0000
    
    结果 全是0,没有进位。
    则异或的结果就是按位加的最终结果
    
    4-5 的运算过程 -----------------------------
    
    即 4+(-5) 
    
    -5:
    原码:1000 0101
    反码:1111 1010
    补码:1111 1011
    用补码进行计算
    
    1)
    
    		0000 0100
    		1111 1011
    异或	---------
    		1111 1111
    		
    2)
    		0000 0100
    		1111 1011
    与		---------
    		0000 0000
    
    没有进位,异或的结果就是按位加的结果
    		
    即 4+(-5) 结果 16进制:FF,10进制 -1, 2进制:1111 1111
    -----------------------------
    
    x*y 乘法的本质 就是y个x相加
    x/y 除法的本质 就是x能减去?个y
    
    -------------------------------------------------------------------
    

      

     ollydbg:

    反汇编窗口-寄存器

    内存窗口-堆栈

    --------------------------------------------------------------

    寄存器

    mov 指令

    mov eax,1

    mov ebx,1

     

    1.立即数到内存

    mov byte ptr ds:[内存地址], 1

    mov指令:
    1.立即数到内存
    2.寄存器到内存
    3.内存到寄存器
    
    1.立即数到内存
    mov byte ptr ds : [0019FF99], 0x12
    mov word ptr ds : [0019FF99], 0x1234
    mov dword ptr ds : [0019FF99], 0x12345678
    
    
    				
    2.寄存器到内存
    mov dword ptr ds : [0019FF99], EAX
    mov word ptr ds : [0019FF99], AX
    mov byte ptr ds : [0019FF99], AL
    
    3.内存到寄存器
    mov eax, dword ptr ds : [0019FF99]
    
    tip:每个编号对应的是一个字节	
    
    读取内存的值
    mov eax, dword ptr ds: [0019FF99]
    
    向内存中写入数据
    mov dword ptr ds:[0019FF99], eax
    
    
    内存地址的5种表示形式:
    1. [0x13FFC4]
    2. [EAX]
    	mov dword ptr ds : [EAX], 0x12345678
    3. [reg + 立即数]
    	读取内存的值:
    	mov ecx, 0x13FFD0
    	mov eax, dword ptr ds:[ecx + 4]
    	
    	向内存中写入数据:
    	mov edx, 0x13FFD8
    	mov dword ptr ds:[edx+0xC], 0x87654321
    4. [reg + reg*{1,2,4,8}]
    	读取内存的值
    	mov eax, 13FFC4
    	mov ecx, 2
    	mov edx, dword ptr ds:[eax + ecx * 4]
    	
    	向内存中写入数据:
    	mov eax, 13FFC4
    	mov ecx, 2
    	mov dword ptr ds:[eax + ecx*4], 87654321
    	
    5. [reg + reg*{1,2,4,8} + 立即数]	
    	读取内存的值
    	mov eax, 13FFC4
    	mov ecx, 2
    	mov edx, dword ptr ds:[EAX + ECX*4 + 4]
    	
    	向内存中写入数据:
    	mov eax, 13FFC4
    	mov ecx, 2
    	mov dword ptr ds:[eax + ecx*4 + 4], 87654321
    	
    
    

     

    存储模式

     

    查看内存地址

    db 内存地址,一个字节

    dw 内存地址,看两个字节

    dd 内存地址,四个字节看

    add eax, ecx

     

  • 相关阅读:
    C#音频截取与原文匹配2:使用ffmpeg处理音频文件
    C#音频截取与原文匹配
    Redis报错: StackExchange.Redis.RedisServerException: Endpoint 39.105.22.111:7200 serving hashslot 12448 is not reachable at this point of time.
    kafka单机安装部署
    zookeeper部署
    mysql-5.7.15编译安装
    centos7安装sqlserver
    redisearch模块安装
    yum安装软件后保留rpm包
    shell读取配置文件
  • 原文地址:https://www.cnblogs.com/kingdelee/p/8436536.html
Copyright © 2011-2022 走看看