逆向-汇编3

383 阅读2分钟

状态寄存器

CPSR(状态寄存器)是用来存放数据的,CPSR是按位来起作用的,每一位都含有不同的意义,记录特定的信息 截屏2021-04-06 下午3.17.46.png

N(Negative)

  • 第31位是N位,符号标志位,
  • 它记录相关的指令执行后,其结果是否为负,如果为负,N = 1,如果为非负数 N = 0 截屏2021-04-06 下午3.25.55.png

Z(Zero)

  • 第30位为Z,0标志位,他表示结果为0,Z = 1,如果结果不为0,那么 Z = 0 截屏2021-04-06 下午3.32.51.png

C(Carry)

  • 第29位为C,进位标志位,进行无符号数的运算
  • 加法运算:当运算结果产生了进位时(无符号数溢出),C = 1,否则 C = 0;
  • 减法运算(包括cmp):当运算时产生了借位时(无符号数溢出),C = 0,否则 C = 1 截屏2021-04-06 下午3.40.03.png 截屏2021-04-06 下午3.43.41.png

V(Overflow)

  • 第28位为v,溢出标志位,在有符号运算的时候如果超过了及其所能表示的范围,称为溢出
  • 正数 + 正数 = 负数 溢出
  • 负数 + 负数 = 正数 溢出
  • 正数 + 负数 不可能溢出 不管是有符号数还是无符号数,只要计算出了结果他都会在对应的位置把结果解读成对应的符号数

adrp & add

截屏2021-04-08 上午10.49.59.png先找到存在常量区的第几页,找到大概位置后再加上偏移值,得到最终的地址

还原代码

可执行文件通过hopper软件来进行反汇编 截屏2021-04-08 下午2.02.12.png可在左边搜索函数,右边是函数的执行过程等

还原函数

codeble2.jpg 再来一个带有if else的函数 codeble2.jpg

循环

do while

截屏2021-04-12 上午9.58.07.png

while

截屏2021-04-12 上午10.14.17.png

for循环

截屏2021-04-12 上午10.20.59.png 可以看出for循环和while的循环逻辑是一样的

switch case

截屏2021-04-12 上午10.34.18.png

当case值超过3个

codeble2.jpg

指针反汇编

截屏2021-04-13 下午4.12.11.png 截屏2021-04-13 下午4.37.23.png

指针在汇编中

截屏2021-04-12 下午10.18.30.png指针的宽度是8

编译器优化

codeble2.jpg

OC代码反汇编

对象

codeble2.jpg codeble2.jpg

Block

GlobalBlock分析

codeble2.jpg

StackBlock分析

codeble2.jpg