iOS-初识汇编

314 阅读2分钟

为什么要学习汇编

我们都知道,App装在手机上是二进制文件,也就是机器能识别的0和1的这种机器语言,而汇编是一种很底层的语言,能和机器语言一一对应,这样,我们就可以把机器语言反编译成汇编语言,知道里面的逻辑。

7C7D9D86-D222-401A-BC2D-4742386AB4C2.png

  • 汇编语言与机器语言一一对应,能编译和反编译
  • 高级语言能编译成汇编语言,但是汇编几乎不能反编译成高级语言

汇编的种类

不同的CPU使用不同的架构,不同的架构对应不同的指令集,我们主要研究arm64架构的汇编。

架构iOS设备
x86模拟器,Mac
armv7iPhone3GS, iPhone4, iPhone4S,iPad, iPad2, iPad3(The New iPad), iPad mini, iPod Touch 3G, iPod Touch4
armv7siPhone5, iPhone5C, iPad4(iPad with Retina Display)
arm64iPhone5S 以后 iPhoneX , iPad Air, iPad mini2以后, M1

CPU和寄存器

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

  • 对于arm64系的CPU来说, 如果寄存器以x开头则表明的是一个64位的寄存器,如果以w开头则表明是一个32位的寄存器,其中32位的寄存器是64位寄存器的低32位部分并不是独立存在的。

通用寄存器

  • 通用寄存器也称数据地址寄存器通常用来做数据计算的临时存储、做累加、计数、地址保存等功能。定义这些寄存器的作用主要是用于在CPU指令中保存操作数,在CPU中当做一些常规变量来使用。
  • ARM64拥有有32个64位的通用寄存器 x0 到 x28,fp,lr,sp
  • PC寄存器:指令指针寄存器,显示了CPU当前要读取指令的地址
  • fp:某些时刻保存栈底的地址
  • sp:保存栈顶的地址
  • lr:保存回家的路,遇到ret指令,PC->lr里面的值