> 技术文档 > ARM反汇编浅析_arm反编译

ARM反汇编浅析_arm反编译

一、概述

本节主要以几条ARM指令为例,讲解如何根据文档理解ARM指令,以及ARM汇编知识在分析中的应用。

手机游戏基本上都运行在ARM指令集的CPU上,了解ARM汇编有助于我们对游戏的分析深入native层,为我们修改游戏逻辑提供分析基础。

现在的游戏的逻辑代码多是写成脚本形式,最常见的是Unity3D的C#形式,cocos2dx的lua形式,以及Unity3D的C#和lua混编形式,除此之外基于纯C++的cocos2dx游戏已经相对比较少。

了解汇编就能对游戏引擎进行分析,定位到脚本的加载和执行函数,可以输出函数执行Log,脚本加载Log,dump原始脚本等,对游戏逻辑进行更直接的监视和控制。

建议安装IDA或其他反汇编工具,加载一个ARM指令集的so文件或者ELF可执行文件,在实践中对照学习。

1.1ARM体系简介

ARM架构,是一个32位精简指令集处理器架构,是目前最为普遍使用的手机处理器架构。

ARM架构表:

(https://zh.wikipedia.org/wiki/ARM_Cortex-A15_MPCore)

关于架构,我们需要了解的是自CortexA8以后的架构都支持硬件断点,但各个厂商在出厂的时候并未开启这个功能。

ARMCPU有15个通用寄存器,分别编号为R0~R15。其中R13也叫SP,用于保存栈顶地址;R14也叫LR,用于保存函数的返回地址;R15也叫PC,由于ARM架构的指令预读,实际运行时PC寄存器并不指向当前执行的指令,而是指向当前指令地址加8处。

二、指令样例讲解

有关所有ARM指令的文档下载链接如下:

http://bear.ces.cwru.edu/eecs_382/ARM7-TDMI-manual-pt1.pdf

http://bear.ces.cwru.edu/eecs_382/ARM7-TDMI-manual-pt2.pdf

http://bear.ces.cwru.edu/eecs_382/ARM7-TDMI-manual-pt3.pdf

指令比较多,不可能也没必要一条一条讲解,以下会拿几条常用的指令作为例子讲解,其他没有涉及的指令都可以在上面链接下载的文档里找到更详细的解释。

2.1B/BL

B/BL指令是最常用的几条指令,作用是跳转到指定的位置,相关的文档解释在ARM7-TDMI-manual-pt2.pdf的4-8页。

指令的二进制解释图: