汇编(一)

2019-03-27  本文已影响0人  昵称是乱起的

1. 汇编的作用

在逆向开发中非常重要的一个环节就是静态分析,我们是逆向iOS系统上面的APP,一个APP安装在手机上面的可执行文件本质上是二进制文件,因为iPhone手机本质上执行的指令是二进制,是由手机上的CPU执行的,所以静态分析是建立在分析二进制上面。

2. 高级语言与汇编

代码在设备上的运行过程:


image.png

3. 汇编的特点

4. 汇编的用处

  1. 编写驱动程序、操作系统(比如Linux内核的某些关键部分)
  2. 对性能要求极高的程序或者代码片段,可与高级语言混合使用(内联汇编)
    软件安全:
    2.1. 病毒分析与防治
    2.2. 逆向\加壳\脱壳\破解\外挂\免杀\加密解密\漏洞\黑客
  3. 理解整个计算机系统的最佳起点和最有效途径
  4. 为编写高效代码打下基础
  5. 弄清代码的本质
    5.1. 函数的本质究竟是什么?
    5.2. ++a + ++a + ++a 底层如何执行的?
    5.3. 编译器到底帮我们干了什么?
    5.4. DEBUG模式和RELEASE模式有什么关键的地方被我们忽略

5. CPU、内存、总线等硬件结构

APP执行过程


image.png

iOS app是由内核从硬盘中读取加载到内存中,然后脱壳,dyld加载等过程

5.1 总线
5.2 内存
image.png

6. 进制

6. CPU&寄存器

6.1 概述

CPU除了有控制器、运算器还有寄存器。其中寄存器的作用就是进行数据的临时存储。

CPU的运算速度是非常快的,为了性能CPU在内部开辟一小块临时存储区域,并在进行运算时先将数据从内存复制到这一小块临时存储区域中,运算时就在这一小快临时存储区域内进行。我们称这一小块临时存储区域为寄存器。

image.png

对于arm64系的CPU来说, 如果寄存器以x开头则表明的是一个64位的寄存器,如果以w开头则表明是一个32位的寄存器,其中32位的寄存器是64位寄存器的低32位部分并不是独立存在的。
对程序员来说,CPU中最主要部件是寄存器,可以通过改变寄存器的内容来实现对CPU的控制,不同的CPU,寄存器的个数、结构是不相同的

6.2 浮点和向量寄存器

6.3 通用寄存器

image.png

6.4 pc寄存器

image.png
  1. pc指令指针寄存器,它指示了CPU当前要读取指令的地址
  2. 在内存或者磁盘上,指令和数据没有任何区别,都是二进制信息
  3. CPU在工作的时候把有的信息看做指令,有的信息看做数据,为同样的信息赋予了不同的意义
  1. CPU根据什么将内存中的信息看做指令?

6.5 高速缓存

CPU每执行一条指令前都需要从内存中将指令读取到CPU内并执行。而寄存器的运行速度相比内存读写要快很多,为了性能,CPU还集成了一个高速缓存存储区域,当程序在运行时,先将要执行的指令代码以及数据复制到高速缓存中去(由操作系统完成),CPU直接从高速缓存依次读取指令来执行。

6.6 指令

str:写入到内存
ldr:读取到内存
orr:按位或
register read $x9读取寄存器x9的值
register write $x9 = 0x10240a03e修改寄存器x9的值

上一篇下一篇

猜你喜欢

热点阅读