iOS安全

iOS逆向(三)状态寄存器&还原高级代码

2018-05-02  本文已影响0人  33ty33

回顾:

bl 跳转,将下一条要执行的指令放入lr(X30)寄存器
ret 返回lr所保存的地址执行代码
pc 指向要执行的代码地址
sp 指向栈,栈平衡(函数调用后,将拉伸的栈空间平衡sub,add)
函数调用会开辟一段栈空间(函数的局部变量、参数、寄存器的保护)
参数放在X0 - X7(个数有关,与数据类型有关 浮点、结构体...),多余的入栈
函数嵌套调用,死递归,不断开辟空间 -> 内存溢出

状态寄存器 CPSR

CPU内部的寄存器中,有一种特殊的寄存器(不同的处理器,个数和结构可能不同),在ARM中,被称为状态寄存器CPSR(current program status register),其他寄存器是用来存放数据的,而CPSR是按位起作用的,即它的每一位都有专门的含义,记录特定的信息。
注:CPSR是32位的

状态寄存器.png

N(Negative)

符号标志位,记录相关指令执行后,结果是否为负,负:1 非负:0

Z(Zero)

0标志位,记录相关指令执行后,结果是否为0,0:1 非0:0

C(Carry)

进位标志位,一般情况下,进行无符号数的运算。
加法:当结果产生了进位时(无符号数溢出),C=1,否则C=0
减法:当运算时产生了借位时(无符号数溢出),C=0,否则C=1

V(Overflow)

溢出标志位,在进行有符号数运算时,如果超过了机器所表示的范围,称为溢出。

上一篇 下一篇

猜你喜欢

热点阅读