逆向五天PPT学习

原创 2018年04月16日 20:12:55
逆向五天PPT
# 高级汇编语言讲解


## 汇编语言概述


## 数据的表示及类型
1.计算机系统内部采用二进制表示*数值数据*,也采用二进制编码表示*非数值数据*和*指令*。这也是很多漏洞产生的根本原因。(如一段数据和一句指令的二进制信息或许相同)
2.存储器的容量是以字节为最小单位来计算的 1字节即1B(Byte,8bit组成一个Byte)。
3.2个字节组成一个字,最低位称为第0位。两个字组成一个双字。


## 汇编程序开发调试方法
1.汇编语言编写的源文件从写出到执行主要包括的三步:
    0x00编写汇编源程序
    0x01对源程序进行编译masm、链接link
    0x02执行可可执行文件中的程序
2.汇编代码调试:在Terminal中执行*debug filename.exe*
    -r  查看、改变寄存器内容
    -d  查看内存中的内容
    -u  将内存中的机器指令翻译成汇编指令
    
## 寄存器讲解
1.寄存器分类:
    8086CPU有14个寄存器,大致可分为三类:
        通用寄存器、控制寄存器、段寄存器。
            通用寄存器又可分为:数据寄存器、指针寄存器、变址寄存器。
### 寄存器分类
 ![](media/15121767836944/15121798280833.jpg)


### 通用寄存器
   ![](media/15121767836944/15121809973577.jpg)


### 段寄存器
8086CPU依赖其内部的四个段寄存器实现寻址1M字节物理地址空间。
8086把1M字节地址空间划分为若干逻辑段,当前使用段的段值存放在段寄存器中。
    表示方法:   段值:偏移
    计算方法: 物理地址 = 段值*16 + 偏移
同时使用四个段,每个段有各自分工
    ![](media/15121767836944/15121815452327.jpg)


### 标志寄存器
8086CPU有个16位的标志寄存器,包含了9个标志,主要用于反映*处理器的状态*和*运算结果的某些特征*(大小??)。
**标志寄存器分为两类**


标志类别       | 寄存器                                   |用途
-------      | -------                               | -------
运算结果标志 | OF、SF、ZF、AF、PF、CF      | 主要受加减运算和逻辑运算结果的影响
状态控制标志 | DF、IF、TF                            | 不受运算结果的影响


  ![](media/15121767836944/15121833601820.jpg)


## 寻址方式讲解


## 指令系统讲解
指令格式:
    [标号:] 指令助记符 [操作数1[,操作数2]] [;注释]
8086的指令系统可以分为6个功能组:
数据传递、算数运算、逻辑运算、串操作、程序控制、处理器控制。
1.数据传递指令:
    格式: MOV DST,SRC
        将操作数2的 值 传递给操作数1,用于寄存器、存储器、数、的传递。
    格式: XCHG OPRD1,OPRD2
        交换两操作数内容,操作素同时是字节或字。
    格式: LEA REG,OPRD
        将操作数OPRD的 有效地址 传递到操作数REG。
2.堆栈操作指令
    堆栈是一段RAM区域。称为栈底的一段地址较大,栈顶地址较小。
    堆栈的段值在堆栈段寄存器SS中,堆栈指针寄存器SP始终指向栈顶。
    堆栈操作遵循“先进后出”原则,数据操作都在栈顶进行。
    格式: PUSH SRC
        将操作数SRC压入堆栈。现将堆栈指针寄存器SP的值减二,再将操作数压入SP所指栈顶。
    格式: POP DST 
        弹出 一个字 数据至目的操作数DST,SP值加二。
3.加减乘除运算指令
    格式: ADD OPRD1,OPRD2
        此指令完成两个操作数相加,并将结果送至目的操作数OPRD1。
    格式: SUB OPRD1,OPRD2
        此指令完成OPRD1减去OPRD2,并将结果返回至操作数OPRD1.
    格式: INC OPRD
        此指令完成对操作数OPRD加一,并将结果返回至OPRD。
    格式: DEC OPRD
        此指令完成对OPRD减一,并将结果返回至OPRD。
    格式: CMP OPRD1,OPRD2
        比较指令完成OPRD1减去OPRD2,运算结果不返回至OPRD1,但影响标志CF、AF、SF、OF、
    AF、PF。
    格式: MUL OPRD
        无符号数乘法指令完成操作数OPRD与AL或AX的无符号乘法操作。
    格式: IMUL PORD
        有符号乘法指令,与上同。
    格式: DLV OPRD
        无符号除法指令完成AX或DX除以操作数OPRD的无符号除法操作
    格式: IDLV OPRD
        有符号除法指令,与上同。除数为0时,引发0号中断。
    格式: CBW
        字节转换为字指令,把寄存器AL中的符号扩展到寄存器AH中。
    格式: CWD
        字转换为双字指令,把寄存器AX中的符号扩展到寄存器DX中。
4.逻辑运算和移位指令
    格式: NOT OPRD
        否操作指令将操作数取反,然后送回至OPRD。
    格式: AND OPRD1,OPRD2
        与操作指令将两个操作数进行按位的逻辑“与”运算,结果返回到目的操作数OPRD1。
    OR OPRD1,OPRD2
    XOR OPRD1,OPRD2
    TEST OPRD1,OPRD2(AND,无返回,仅影响标志)
    移位指令
    循环(移位)指令
5.转移指令
    格式: JMP 标号  (JMP NEXT)
        无条件段内直接转移指令 使控制无条件的转移至标号处。
    格式: JMP OPRD
        无条件段内间接转移指令 使控制无条件地转移到由操作数OPRD的内容给定的目标地址处。
    JMP FAR PTR
    JMP OPRD
    条件转移指令:根据某标志位或标志位的逻辑运算来判别条件是否成立。条件成立则转移,否则继续执行。通常在条件转移指令之前,总有用于条件判决的有关指令,例如CMP、TEST。
    JZ标号
    JE标号
    JNZ标号
    JNE标号
    JL标号
    JNGE标号
    JBE标号
    JNA标号
    循环指令:
        LOOP 标号  计数循环指令,使寄存器CX的值减一,结果不等于0则转移到标号
        LOOPE/LOOPZ 标号
        LOOPNE/LOOPNZ 标号
        JCXZ 标号  跳转指令,当寄存器CX的值等于0时跳转到标号。


## 子程序设计    
如果某个程序片段将反复在程序中出现,那么就把它设计成子程序。

![](media/15121767836944/15121998206744.jpg)


-------
*CALL*和*RET*都是转移指令,它们都修改IP,或同时修改CS和IP,通常被用来实现子程序的设计。
-------
CALL和RET指令共同支持了汇编语言中的模块化设计,模块化设计可以实现多个相互联系功能独立的子程序来解决复杂问题。
-------
CALL指令的四种调用模式
SET指令的四种执行模式
### 特殊的子程序调用---中断
8086CPU在执行完当前正在执行的指令之后,检测到从CPU外部发送过来的或内部产生的一种特殊信息,并且可以立即对所接收到的信息进行处理。这种特殊信息我们称其为中断信息。
中断的意思是指CPU不再接着向下执行,而是转去处理中断信息
-------
CPU内部出现四种事件时将产生相应的中断信息:
    除法错误、单步执行、执行INTO指令、执行INT指令。
中断源是指产生中断信息的事件。标示中断源的数据称为中断类型码。
    除法错误:0
    单步执行:1
    执行INTO指令:4
    执行INT指令:指令格式为int n,其中n为中断类型码
    用于处理中断信息的程序被称为 中断处理程序 ,中断类型码的作用就是用来定位中断处理程序。
用*IRET*指令返回返回程序进入中段前的位置,通常用于中断处理程序末尾。


### 疑问

Dom第五天学习总结

1.    控制层的显示     修改style.display  例子:切换层的显示         function togglediv(){             var div1 = ...
  • u013905744
  • u013905744
  • 2015-08-23 15:35:02
  • 186

自己整理的安卓逆向学习路线图

作者:非虫 链接:http://www.zhihu.com/question/26459870/answer/32909329 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转...
  • haolipengzhanshen
  • haolipengzhanshen
  • 2016-05-17 20:10:05
  • 1477

七天学会时间管理

导语 人生最宝贵的两项资产,一项是头脑,一项是时间。无论你做什么事情,即使不用脑子,也要花费时间。因此,管理时间的水平高低,会决定你事业和生活的成败。每个星期有168 个小时,其中56 个小时在睡眠中...
  • jjsmile
  • jjsmile
  • 2006-01-24 10:12:00
  • 1407

分享:『 安卓逆向的学习路线..』

这是我在一个论坛上的回答。我的博客没有太大的含量 所以来的小白居多,相信大家不少也有困惑, 这次我就冒昧当一次蹩脚的矮矮的路边灯,分享一下外行人在安卓逆向路上的历程.....
  • zihao2012
  • zihao2012
  • 2014-11-04 10:39:32
  • 2653

iOS 菜鸟逆向学习 (一)

最近在做图像识别,目前借助第三方来进行图像识别,试了很多SDK,最多的就是高通了,自己写的话可以借助opencv实现一些,也在网上搜了许多识别的app,想知道他们用的什么方法,最少我想知道第三方是什么...
  • think_ma
  • think_ma
  • 2014-12-17 23:31:59
  • 1012

安卓逆向学习笔记(10)- 安卓逆向学习资料

因为喜欢Android安全,而Android逆向是Android安全的一个分支,所以小弟利用业余时间自学了一点Android逆向。 在学习过程中总结了一点学习资料,特此分享给大家。 (1)Androi...
  • pengyan0812
  • pengyan0812
  • 2015-05-30 19:15:15
  • 4005

Python快速学习第五天

第五天:抽象 1、    函数 检测函数是否可调用:callable >>> import math >>> y=math.sqrt >>> callable(y) True >>>...
  • tanggao1314
  • tanggao1314
  • 2016-08-14 22:21:31
  • 1485

iOS逆向学习之越狱

iPhone 6 越狱 版本: 9.2.1 需要 windows 系统  开始学习 iPhone 逆向,查了一下那些手机版本可以越狱http://jailbreak.25pp.com/ios/,...
  • langzxz
  • langzxz
  • 2018-01-22 21:20:23
  • 279

逆向分析学习入门教程

转在于 逆向工厂(一):从hello world开始前沿从本篇起,逆向工厂带大家从程序起源讲起,领略计算机程序逆向技术,了解程序的运行机制,逆向通用技术手段和软件保护技术,更加深入地去探索逆向的魅力。...
  • wang010366
  • wang010366
  • 2016-09-17 12:16:21
  • 9853

iOS 逆向工程 - 学习整理

一、class-dump 简介:顾名思义,就是用来导出目标对象的class信息的工具,私有方法声明也能导出来。 原理:利用 Objective-C语言的 runtime 特性,将存 在Mach...
  • sun2728
  • sun2728
  • 2016-08-11 17:23:24
  • 2290
收藏助手
不良信息举报
您举报文章:逆向五天PPT学习
举报原因:
原因补充:

(最多只允许输入30个字)