12 ARM汇编
Android系统采用java作为平台软件基础开发语言,NDK使Android平台可以运行C/C++代码这些代码汇编成ARM的elf可执行文件。
原生程序生成过程

经历4步:1。预处理2。编译3。汇编4。链接
经过第2步编译后C代码变成ARM汇编代码,NDK支持直接使用ARM汇编编写的 .s文件
ARM使用寄存器保存值或内存地址,共有37个寄存器,31个为通用寄存器,6个为状态寄存器。ARM有7种运行模式:
1。用户模式(usr):ARM正常运行状态
2。快速中断模式(fiq):用于高速数据传输或通道处理
3。外部中断模式(irq):用于通用的中断处理
4。管理模式(svc):操作系统使用的保护模式
5。数据访问终止模式(abt):当数据或指令预取终止时进入该模式,用于虚拟存储及保护
6。系统模式(sys):运行具有特权的操作系统任务
7。为定义指令终止模式(und):当未定义的指令执行时进入该模式
ARM逆向只涉及用户模式(usr)。
用户模式下:可以访问的寄存器分为:
不分组寄存器:R0~R7
分组寄存器:R8~R14
程序计数器:R15
当前程序状态寄存器:CPSR
ARM两种运行状态:32位字对齐ARM指令,16位对齐Thumb指令
ARM与Thumb关系:
|
Thumb |
ARM |
|
|
R0~R7寄存器 |
状态相同 |
|
|
CPSR |
状态相同 |
|
|
寄存器对应关系 |
FP |
R11 |
|
IP |
R12 |
|
|
SP |
R13 |
|
|
LR |
R14 |
|
|
PC |
R15 |
|
ARM汇编语言程序结构
1。段定义:
.data数据段:全局变量、常量等信息编译器。细分的话 常量在 .rodata 代码在 .text
ARM使用 .section指令来定义段 格式:
.section name [,”flags”[,%type[,flag_specific_arguments]]]
name段名 flags段属性、type 段类型、flag_specific_arguments平台相关参数
2。注释和标号
注释使用 /* */ 单行注释使用@开头
标号:程序使用跳转时使用,汇编器将标号转换成地址
格式:<标号>
3。汇编指令:
程序中以“.”开头的指令都是汇编器指令,与汇编器有关不属于ARM指令集
.file:指定源文件名
.align:指定代码对齐方式
.ascii:声明字符串
.global:声明全局符号
.type:指定符号类型
.word:用来存放地址值
.size:设置指定符号大小 eg:“.size main, .-main”当前地址减去main符号的地址即为这个main函数的大小
.ident:编译器标识 生成可执行程序后放置到“.comment”段中
子程序与参数传递
子程序在代码中完成一个独立功能,与函数概念相同
声明方法:
.global 函数名
.type 函数名,%function
函数名:
<…函数体…>
ARM函数传参问题:规定,
R0~R3寄存器传递第1到第4个参数,超出的参数通过栈传递。
R0寄存器同时用来存放函数调用返回值。
被调用的函数在返回前无需恢复这些寄存器内容
ARM寻址方式
立即寻址
寄存器寻址
寄存器移位寻址:五种移位操作
1。LSL:逻辑左移,移位后寄存器空出的低位补0
2。LSR:逻辑右移,移位后寄存器空出的高位补0
3。ASR:算术右移,符号为不变,正数补0负数补1
4。AOR:循环右移,移位后移出低位填入空出的高位
5。RRX:带扩展的循环右移,操作数右移一位,空出的高位用C标志的值填充
寄存器间接寻址
基址寻址
多寄存器寻址
堆栈寻址
LDM出,STM入
LDM和STM指令前缀表示多寄存器寻址,FA、EA、FD、ED指令后缀
块拷贝寻址
连续地址数据从存储器某一位置拷贝到另一位置
LDM和STM指令前缀,IA、DA、IB、DB为指令后缀
相对寻址
以程序PC计数器的当前值为基地址,指令中的地址标号为偏移量,相加之后得到操作数的有效地址。
Eg: BL NEXT
…………
NEXT:
…………
12 ARM汇编的更多相关文章
- ARM汇编
ARM汇编 ISA ISA即指指令集架构(Instruction Set Architecture)是与程序设计有关的计算机架构的一部分,包括本地数据类型.指令.寄存器.地址模式.内存架构.中断和意外 ...
- arm汇编进入C函数分析,C函数压栈,出栈,传参,返回值
环境及代码介绍 环境和源码 由于有时候要透彻的理解C里面的一些细节问题,所有有必要看看汇编,首先这一切的开始就是从汇编代码进入C的main函数过程.这里不使用编译器自动生成的这部分汇编代码,因为编译器 ...
- 常用ARM汇编指令
常用ARM汇编指令 [日期:2012-07-14] 来源:Linux社区 作者:xuyuanfan77 [字体:大 中 小] 在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初 ...
- ARM 汇编的一些规范
A.5.1 文件格式 ARM 源程序文件(即源文件)为文件格式,可以使用任一文本编辑器编写程序代码. 在一个项目中,至少要有一个汇编源文件或C 程序文件,可以有多个汇编 ...
- ARM 汇编指令
ARM汇编程序特点: l 所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理,都是要传送到通 ...
- linux驱动系列之arm汇编
在arm平台学习linux时,会遇到arm汇编指令,arm汇编指令与8086汇编指令很多地方都不同,在此记下来以免后面忘了,同时在学习了汇编指令之后分析一些汇编指令编写的代码. 一.相对跳转指令b.b ...
- 经常使用ARM汇编指令
一面学习,一面总结,一面记录. 以下是整理在网上找到的一些资料,简单整理记录一下,方便以后查阅. ARM处理器的指令集能够分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.载入/存储指令. ...
- 【嵌入式开发】 ARM 汇编 (指令分类 | 伪指令 | 协处理器访问指令)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42408137 转载请著名出处 本博客相关文档下载 : -- AR ...
- ARM汇编指令格式
一.ARM介绍 1) arm汇编中,程序下一步执行哪一条指令,是根据程序计数器(PC)的值来决定. 类比于8086的CS:IP的功能. 2) 8086属于CISC(复杂指令集),每条指令长度不等,ar ...
随机推荐
- 【转】编写高质量代码改善C#程序的157个建议——建议56:使用继承ISerializable接口更灵活地控制序列化过程
建议56:使用继承ISerializable接口更灵活地控制序列化过程 接口ISerializable的意义在于,如果特性Serializable,以及与其像配套的OnDeserializedAttr ...
- 排序算法-插入排序(Java)
package com.rao.linkList; import java.util.Arrays; /** * @author Srao * @className InsertSort * @dat ...
- Android 开发基础入门篇: Android Studio 导入工程
最简单的方式 等待加载完就好了
- 讲题专用——线段树——优化DP
题目链接:http://codevs.cn/problem/3342/ 题解: 最小化最大值:二分 二分最长空题段 令f[i]表示抄第i道题所花费的最小时间 状态转移方程:f[i]=min(f[j]) ...
- 深入js系列-类型(开篇)
思考 作为一个编程人员,你可能从来没仔细思考过,为什么这么多高级语言会有类型这东西. 实际上,类型有点类似生活中的类别,我们日常生活,早已经把这个概念理解到了,切肉和切水果会用不同的刀. 语言级别的类 ...
- jQuery事件绑定与切换
一.事件绑定 1.标准方式 1. jquery标准的绑定方式 * jq对象.事件方法(回调函数): * 注:如果调用事件方法,不传递回调函数,则会触发浏览器默认行为. * 表单对象.submit(); ...
- SCAN----Redis检索键值对
转载地址:http://redis.readthedocs.org/en/latest/key/scan.html SCAN SCAN cursor [MATCH pattern] [COUNT co ...
- 2018-2019-2 网络对抗技术 20165230 Exp7 网络欺诈防范
实验目的 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. 实验内容 简单应用SET工具建立冒名网站 ettercap DNS spoof 结合应用两种技术,用DNS sp ...
- exports与module.exports的区别,以及export与export.defult的区别
在 JS 模块化编程的模块引入上, 主要有两种方式: CommonJS 模块标准 ES6 moduel 特性 1. CommonJS 模块引入:require() 模块导出:exports 或者 mo ...
- win7下每次打开Excel2007都提示向程序发送命令时出现问题的解决方案
每次打开Excel2007都提示向程序发送命令时出现问题,要打开两次才可以打开,下面介绍该问题的解决办法. 第一种情况:也就是屏蔽DDE的解决方案,这是大多数人都是这种情况,该情况的解决办法: exc ...