状态寄存器
CPSR(状态寄存器)是用来存放数据的,CPSR是按位来起作用的,每一位都含有不同的意义,记录特定的信息
N(Negative)
- 第31位是N位,符号标志位,
- 它记录相关的指令执行后,其结果是否为负,如果为负,N = 1,如果为非负数 N = 0
Z(Zero)
- 第30位为Z,0标志位,他表示结果为0,Z = 1,如果结果不为0,那么 Z = 0
C(Carry)
- 第29位为C,进位标志位,进行无符号数的运算
- 加法运算:当运算结果产生了进位时(无符号数溢出),C = 1,否则 C = 0;
- 减法运算(包括cmp):当运算时产生了借位时(无符号数溢出),C = 0,否则 C = 1
V(Overflow)
- 第28位为v,溢出标志位,在有符号运算的时候如果超过了及其所能表示的范围,称为溢出
- 正数 + 正数 = 负数 溢出
- 负数 + 负数 = 正数 溢出
- 正数 + 负数 不可能溢出 不管是有符号数还是无符号数,只要计算出了结果他都会在对应的位置把结果解读成对应的符号数
adrp & add
先找到存在常量区的第几页,找到大概位置后再加上偏移值,得到最终的地址
还原代码
可执行文件通过hopper软件来进行反汇编
可在左边搜索函数,右边是函数的执行过程等
还原函数
再来一个带有if else的函数
循环
do while
while
for循环
可以看出for循环和while的循环逻辑是一样的
switch case
当case值超过3个
指针反汇编
指针在汇编中
指针的宽度是8
编译器优化
OC代码反汇编
对象