iOS逆向及安全

iOS逆向开发(九)- 初识ARM64汇编

Posted on 2019-01-10,2 min read
封面图

1.生成汇编文件
2.寄存器
3.指令

生成汇编文件

  • 生成汇编文件

$ xcrun --sdk iphoneos clang -S -arch arm64 main.c -o main.s

寄存器

  • 通用寄存器

64bit的:x0~x28
32bit的:w0w28(属于x0x28的低32bit)

  • 程序计数器

pc (Program Counter)
记录CPU当前指令的是哪一条指令
存储着当前CPU正在执行的指令的地址
类似8086汇编的ip寄存器

  • 堆栈指针

sp(stack point)
fp (Frame point),也就是X29

  • 链接寄存器

IR(Link Register),也就是X30
存储着函数返回地址

  • 程序状态寄存器

cpsr (Current Program Status Register)
spsr (Saved Program Status Register),异常装下使用

指令

  • mov

  • ret

函数返回
将IR(X30)寄存器的值赋值给pc寄存器

  • add

  • sub

  • cmp

将两个寄存器相减
相减的结果会影响cpsr寄存器的标志位

  • b

跳转指令
壳带条件跳转,配合cmp使用

  • bl

带返回的跳转指令

  • 条件域

EQ:等于
NE:不等于
GT:大于
GE:大于等于
LT:小于
LT:小于等于

  • 内存操作

load:从内存中读取数据
store:往内存中写入数据


下一篇: iOS逆向开发(八)- Theos之Tweak→