rnf147852 发表于 2017-12-4 14:04:20

任鸟飞安卓手游逆向----arm汇编寄存器

我们知道android 的原生程序是运行于linux内核上的,并且处理器基于arm那么我们想要学习安卓手游逆向就要学习arm汇编的基础知识
学习的前提是你已经掌握了一定的0x86汇编基础,在0x86汇编基础上对比学习即可,如果没有一定的端游逆向基础,可以回去看看我之前的端游逆向基础arm 寄存器1.r0 函数返回值 ,对应eax的作用2.arm函数约定中r0-r3来传递参数,多于4个参数再用push传递参数 ,对应fastcall函数约定寄存器传参以及push 传参,不过寄存器传参数量      不同3.r4-r11 来保存局部变量,进入更内层函数时一样要保存,出来前还原,对应0x86堆栈指针表示的局部变量,以及进更内层函数push ebpThumb 指令集 通常只是r4-r7 来保存局部变量
(ARM模式每条指令4字节,Thumb模式每条指令2字节)那么Thumb 指令集是什么呢?Thumb 指令可以看作是 ARM 指令压缩形式的子集,是针对代码密度的问题而提出的,它具有 16 位的代码   密度但是它不如ARM指令的效率高
4.r12既ip寄存器是内部调用暂存寄存器
5.r13既sp寄存器是栈顶指针,它不能用于任何其它用途,对应esp寄存器
6.r14既lr寄存器,保存函数的返回地址,也可以用作他用,对应里存放的返回EIP,调用函数时,自动把返回地址放入r14中,例如                  BLxxxx(对应call xxxx)子程序通过把r14复制到PC(对应EIP)来    实现返回    例如: MOV PC, LR 或则 BX LR
7.r15 pc 是程序计数器,它不能用于任何其它用途,对应EIP   arm是流水线优化,pc和EIP不完全相同,EIP时刻指向准备执行的代码    地址而PC值=当前程序执行位置+8 Thumb模式下等于当前指令地址加4,因为流水线优化,有3个过程,取指,译指,执行,PC指向取指的代码,PC-4指向译指的代码,PC-8指向译指的代码
8.r16 CPSR当前程序状态寄存器助记符后面跟的S 就是影响这个寄    存器例如add 和 adds ,adds就是影响状态寄存器的操作,而add不影响
9.r7 常用于保存系统调用号
10.r11FP用于保存栈帧对应EBP 但是由于返回地址不用EBP负责,这个寄存器很多时候用做通用寄存器 对应0x86 地位明显降低
11.R0~R12是通用寄存器(R11,R12不完全是),它们可以在常规操作中使用,来存储临时变量或地址。

rnf147852 发表于 2017-12-8 11:12:16

联系我时,请说是在 挂海论坛 上看到的,谢谢!
页: [1]
查看完整版本: 任鸟飞安卓手游逆向----arm汇编寄存器