任鸟飞安卓手游逆向----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不完全是),它们可以在常规操作中使用,来存储临时变量或地址。 联系我时,请说是在 挂海论坛 上看到的,谢谢!
页:
[1]