概述
- Android与ARM处理器
- ARM处理器架构概述
- ARM处理器家族
- Android支持的处理器架构
- ARM
- x86
- MIPS
原生程序与ARM汇编语言
- 逆向初步
- 原生程序的生成过程
- 预处理 gcc -E hello.c hello.i
- 编译 gcc -S hello.i -o hello.s
- 汇编 gcc -c hello.s -o hello.o
- 链接 gcc hello.o -o hello
ARM知识
- ARM有31个通用寄存器和6个状态寄存器
ARM的运行模式
模式 简写 作用 用户模式 usr ARM处理器正常的执行状态 快速中断模式 fiq 高速数据传输或通道处理 外部中断模式 irq 通用中断处理 管理模式 svc ARM操作系统使用的保护模式 数据访问终止模式 abt 数据或指令预取终止, 用于虚拟存储和存储保护 系统模式 sys 运行具有特权的操作系统任务 未定义指令中止模式 und 执行未定义指令时进入
ARM汇编语言程序结构
- 完整的ARM汇编程序
- 处理器架构定义
- .arch 处理器架构
- .fpu 协处理器类型
- .eabi_attribute 接口属性
- 段定义
- .section
- .rodata
- .text
- 注释与标号
/**/
@ 汇编器指令
指令 说明 .file 源文件名 .align 代码对齐方式 .ascii 声明字符串 .global 声明全局符号 .type 指定符号的类型 .size 指定符号的大小 .ident 无实际用途 - 子程序和参数传递
.global 函数名
.type 函数名, %function
函数名:
<函数体>
ARM处理器寻址方式
寻址方式 说明 举例 立即数寻址 多用于赋初值, 立即数以#作为前缀 MOV R0, #1234 寄存器寻址 操作数的值在寄存器中 MOV R0, R1 执行后R0=R1 寄存器移位寻址 操作前对源寄存器进行移位 MOV R0, R1, LSL #2 移位寻址RRX 带扩展的循环右移 操作数右移一位, 高位用C标志值填充 寄存器间接寻址 寄存器值是操作数的地址指针 LDR R0, [R1] 基址寻址 将地址码给出的基址寄存器与偏移量相加形成操作数的地址 LDR R0, [R1, #-8] 多寄存器寻址 一条指令最多可以完成16个通用寄存器值的传送 LDMIA R0, {R1, R2, R3, R4} 堆栈寻址 STMFD SP!, {R1-R7, LR} 将R1-R7 LR入栈, 用于保护现场 块拷贝寻址 连续地址数据从存储器某一位置拷贝到另一个位置 LDMIA R0!, {R1-R3}从R0寄存器指向的存储单元开始取三个字到R1-R3 相对寻址 以PC当前值为基址, 指令中的地址标号作为偏移量, 相加得到操作数地址 ARM与Thumb指令集
指令格式
opcode{cond}{S}{.W|.N} Rd, Rn{, operand2}
opcode为助记符
cond为执行条件条件码助记符 标志 含义 EQ Z=1 相等 NE Z=0 不相等 CS/HS C=1 无符号数大于或等于 CC/LO C=0 无符号数小于 MI N=1 负数 PL N=0 正数或0 VS V=1 溢出 VC V=0 没有溢出 HI C=1, Z=0 无符号数大于 LS C=0, Z=1 无符号数小于或等于 GE N=V 有符号数大于或等于 LT N!=V 有符号数小于 GT Z=0, N=V 符号数大于 LE Z=1, N!=V 有符号数小于或等于 AL 任何 相等 S 指定指令是否影响CPSR的值
.W .N为指令宽度说明符
Rd为目的寄存器
Rn为第一个操作数寄存器
operand2为第二个操作数跳转指令
助记符 含义 举例 B{cond} label 简单的分支指令, 跳转到指定地址处执行 BNE label BL{cond} label 带链接的跳转, 将当前指令的下条指令地址拷贝到LR(R14), 然后跳转到label处执行, 通常用于子程序调用, 通过MOV PC, LR返回主程序 BX{cond} Rm 带状态切换的跳转指令, 如果条件满足, 处理器判断Rm的位[0]是否为1, 是则将CPSR标志T置位, 并将目标地址处代码解释为Thumb代码, 否则将CPSR的标志T复位, 按ARM方式执行. BLX{cond} Rm 集合了BL和BX的功能 - 存储器访问指令
- 数据处理指令
- 其他指令
- 多媒体编程与浮点计算的NEON与VFP指令集
最后
以上就是昏睡山水为你收集整理的Android逆向分析基础-ARM 汇编语言基础的全部内容,希望文章能够帮你解决Android逆向分析基础-ARM 汇编语言基础所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复