没有合适的资源?快使用搜索试试~ 我知道了~
ARM指令集: ADC 带进位的32位数加法 ADD 32位数相加 AND 32位数的逻辑与 B 在32M空间内的相对跳转指令 BIC 32位数的逻辑位清零 BKPT 断点指令 BL 带链接的相对跳转指令 BLX 带链接的切换跳转 BX 切换跳转 CDP\CDP2 协处理器数据处理操作 CLZ 零计数 CMN 比较两个数的相反数 CMP 32位数比较 EOR 32位逻辑异或
资源推荐
资源详情
资源评论





















ARM 汇编
介绍
ARM 架构
ARM 架构,过去称作高级精简指令集机器(Advanced RISC Machine,更早称作:Acorn RISC Machine),是一个 32 位精简指令集
(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。由于节能的特点,ARM 处理器非常适用于移动通信领域,符合其主要
设计目标为低成本、高性能、低耗电的特性。
至 2009 年为止,ARM 架构处理器占了市面上所有 32 位嵌入式 RISC 处理器 90%的比例
[1]
,使它成为占全世界最多数的 32 位架构之
一。ARM 处理器可以在很多消费性电子产品上看到,从便携式设备(PDA、移动电话、多媒体播放器、掌上型电子游戏,和计算
机)到电脑外设(硬盘、桌面型路由器),甚至在导弹的弹载计算机等军用设施中都有他的存在。在此还有一些基于 ARM 设计的派
生产品,重要产品还包括 Marvell 的 XScale 架构和德州仪器的 OMAP 系列。
2011 年,ARM 的客户报告了 79 亿 ARM 处理器出货量,占有 95%的智能手机、90%的硬盘驱动器、40%的数字电视和机上盒、15%
的微控制器、和 20%的移动电脑
[2]
。在 2012 年,微软与 ARM 科技生产了新的 Surface 平板电脑,AMD 宣布它将于 2014 年开始生产
基于 ARM 核心的 64 位服务器芯片。
架构
处理器家族
ARMv1
ARM1
ARMv2
ARM2、ARM3
ARMv3
ARM6、ARM7
ARMv4
StrongARM、ARM7TDMI、ARM9TDMI
ARMv5
ARM7EJ、ARM9E、ARM10E、XScale

ARMv6
ARM11、ARM Cortex-M
ARMv7
ARM Cortex-A、ARM Cortex-M、ARM Cortex-R
ARMv8
Cortex-A50
[9]
http://zh.wikipedia.org/wiki/ARM%E6%9E%B6%E6%A7%8B
原生程序初次逆向之 ARM 与 X86 相关知识对比
近来开始学习原生逆向,并对其中一些基础知识做下总结
Android 的原生程序运行于 Linux 内核上,并且处理器基于 ARM,因此对于 NDK 的逆向,一些设计汇编知识的安全技术(注入,
HOOK,劫持)等 就需要了解有关知识。因此有必要学习一些与 ARM 相关的知识,下面主要介绍我们必须要了解的知识,具体指令
等更加详细的知识参考相关文档,总结目录如下:
1. 寄存器比较之 ARM VS 80X86
2. 函数调用比较之 ARM VS 80X86
3. Linux 系统调用比较之 ARM VS 80X86
寄存器比较之 ARM VS 80X86
1.80X86
寄存器有以下规则:
(1)数据寄存器(EAX、EBX、ECX、EDX):数据寄存器主要用来保存操作数和运算结果等信息。但其也有一些约定俗成的特别作
用。EAX 用于存放 函数返回值;EBX 常用作计算存储器地址时的基址寄存器;ECX 用作计数器使用,EDX 一些计算中的默认参与运
算寄存器。
(2)变址寄存器(ESI、EDI):它们主要用于存放存储单元在段内的偏移量。

(3)指针寄存器(EBP、ESP):ESP 常用作堆栈指针,指向栈顶维护堆栈变化;EBP 用作栈基地址,主要用于维护该函数栈帧,可
直接存取堆栈中的数据。
(4)指令指针(EIP):存放下次将要执行的指令在代码段的偏移量。
2.ARM(用户模式)
寄存器的使用必须满足下面的规则:
(1)函数间通过寄存器 R0~R3 来传递参数,低于 32 位的函数返回值存于 R0。
(2)在函数中,使用寄存器 R4~R11 来保存局部变量。函数进入时必须保存所用到的局部变量寄存器的值,在返回前必须恢复这些
寄存器的值;对于函数中没有用到的寄存器则不必进行这些操作。在 Thumb 中,通常只能使用寄存器 R4~R7 来保存局部变量。
(3)寄存器 R12 用作函数间的 scratch 寄存器,记作 IP
(4)寄存器 R13 用作数据栈指针,记作 SP。函数调用前后必须保持堆栈平衡。
(5)寄存器 R14 称为连接寄存器,记作 LR。它用作保存函数的返回地址。如果在函数中保存了返回地址,寄存器 R14 则可以
用作其他用途。
(6)寄存器 R15 是程序计数器,记作 PC。

函数调用比较之 ARM VS 80X86
函数调用样例:
代码:

#include <stdio.h>
int call(int a,int b,int c,int d,int e,int f){
int sum =0;
int v1 =1,v2 =2,v3 =3,v4 =4;
sum = a+b+c+d+e+f+v1+v2+v3+v4;
return sum;
}
int main(void){
int sum =0;
sum =call(1,2,3,4,5,6);
printf("sum = %d\n",sum);
return 0;
}
1.80X86
函数调用主要是使用 CALL 指令触发,函数结束并由 RET/RETN 返回到调用该函数时的下一条指令。在函数调用执行过程中,大部分
通过栈来完成,包括参数的传递、局部变量存储、函数返回地址等。函数调用函数栈变化如下(常见调用方式):
|…… |<-------- [ESP](分配完局部变量后)
|…… |
|局部变量 2 |
|局部变量 1 |
|上层[EBP] |<-------- [EBP](栈帧)
|返回地址 |
|参数 1 |
|参数 2 |
|参数 3 |
+|栈底方向,高地址|+<-------- [ESP](调用前)
剩余162页未读,继续阅读
资源评论


天空丶蓝蓝
- 粉丝: 0
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
