入门 ARM 汇编(二)—— 寻址方式
忧愁他整天拉着我的心,像一个琴师操练他的琴;悲哀像是海礁间的飞涛:看他那汹涌,听他那呼号!—— 徐志摩·四行诗一首
ilocker:关注 Android 安全(新手) QQ: 2597294287
立即数寻址
源操作数为立即数,多用于给寄存器赋初值。

指令执行后,R1 寄存器的值就是 2。
立即数也可为:十六进制,# 后跟 0x;八进制,# 后跟 0;二进制,# 后跟 0b。
立即数有合法性限制,具体可 google 相关资料。
寄存器寻址
操作数的值在寄存器中。

指令执行后,R0 = R5。
速度仅次于立即数寻址。
寄存器移位寻址
类似于寄存器寻址,只是在操作前先对源寄存器操作数进行移位操作。
- LSL:逻辑左移,低位补 0
- LSR:逻辑右移,高位补 0
- ASR:算术右移,移位过程中保持符号位不变(如果源操作数为正数,高位补 0,否则补 1)
- ROR:循环右移,移出的低位填入空出的高位
- RRX:带扩展的循环右移,高位用进位标志位 C 填充(标志位 C 在 CPSR 中)

指令执行后,R1 = R8 * 8。
.W 表示生成 32 位指令。
寄存器间接寻址
由寄存器值指出操作数在内存中的地址。

将 R4 寄存器值作为地址,取出此地址中的值赋给 R6。
基址寻址
与寄存器间接寻址有些类似,多用于查表、数组访问等操作。

将 R6 寄存器值加 1 作为地址,取出此地址中的值赋给 R0。
LDR 后面加 B,表示是从内存加载字节数据到寄存器。
多寄存器寻址

LDM 是数据加载指令,后缀 IA 表示每执行完一次加载操作后 R6 寄存器的值自增 1 个字。
指令执行后,R0 = [R6],R1 = [R6 + #4],R2 = [R6 + #8],R3 = [R6 + #12]。
ARM 指令集中,一个“字”表示一个 32 位的数值。
多寄存器寻址的一条指令最多可以完成 16 个通用寄存器值的传送。
R6 后面的叹号,表示指令执行后,更新基址寄存器 R6 的值。否则,指令执行后 R6 的值是不变的。
堆栈寻址
LDM 和 STM 作为指令前缀,表示多寄存器寻址。
FA、EA、FD、ED 作为指令后缀(指明堆栈生长方向和堆栈指针指向位置等,后面会继续学习)。

将数据出栈,保存到 R0、LR,多用于恢复子程序现场。
块拷贝寻址
LDM 和 STM 作为指令前缀,表示多寄存器寻址。
IA、DA、IB、DB 作为指令后缀(指明基址寄存器的递增或递减方式,后面会继续学习)。
示例同“多寄存器寻址”。
相对寻址
将程序计数器 PC 的当前值作为基地址,加上偏移量后得到操作数的有效地址。

这里的 BL 采用的就是相对寻址,标号 __libc_format_log 就是偏移量。
学习资料: 《Android 软件安全与逆向分析》
入门 ARM 汇编(二)—— 寻址方式的更多相关文章
- 入门 ARM 汇编(一)—— 知识铺垫
我读着史铁生的散文,零碎的牵扯起我生命中不曾出现过的记忆,一如北方的黄山厚土之中悠忽而来的忧伤的信天游,那些灿若信仰一样的阳光以及阳光下虔诚的子民.我想有一次远行,于细碎流淌的时光与路途之中,观察所有 ...
- GNU ARM汇编快速入门
以前用ARM的IDE工具,使用的是ARM标准的汇编语言.现在要使用GNU的工具,当然要了解一点GNU ARM汇编的不同之处.其实非常的简单,浏览一下文档然后再看看程序就完全可以搞定了,或者你硬着头皮看 ...
- 经常使用ARM汇编指令
一面学习,一面总结,一面记录. 以下是整理在网上找到的一些资料,简单整理记录一下,方便以后查阅. ARM处理器的指令集能够分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.载入/存储指令. ...
- ARM汇编指令集_学习笔记(1)
一.什么是ARM汇编? 运行在ARM处理器上的汇编语言就叫ARM汇编. C程序运行在X86平台,底层就是X86汇编:运行在ARM平台,底层就是ARM汇编.ARM汇编与X86汇编有显著区别. X86属于 ...
- GNU ARM 汇编指令
第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针.设置页表.操作 ARM的协处理器等.初始化完成后就可以跳转到C ...
- ARM汇编1
一. 指令和伪指令 1.1. 指令 a. (汇编)指令是CPU机器指令的助记符,经过编译后会得到一串10组成的机器码,可以由CPU读取执行. 1.2. 伪指令 b. (汇编)伪指令本质上不是指令(只是 ...
- 嵌入式ARM汇编详解
文章目录 零.预备知识 1.ARM与X86 2.ARM中指令的执行 3.ARM的九种寻址方式 立即数寻址 寄存器寻址 寄存器间接寻址 寄存器偏移寻址 寄存器基址变址寻址 批量寄存器寻址 相对寻址 堆栈 ...
- ARM汇编指令调试方法
学习ARM汇编时,少不了对ARM汇编指令的调试.作为支持多语言的调试器,gdb自然是较好的选择.调试器工作时,一般通过修改代码段的内容构造trap软中断指令,实现程序的暂停和程序执行状态的监控.为了在 ...
- ARM汇编
ARM汇编 ISA ISA即指指令集架构(Instruction Set Architecture)是与程序设计有关的计算机架构的一部分,包括本地数据类型.指令.寄存器.地址模式.内存架构.中断和意外 ...
随机推荐
- CAS客户端服务器端配置步骤
来自我的个人网站:http://lkf.22web.org/ cas介绍: CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 ...
- AES .net 、JS 相互加密解密
/// <summary> /// AES加密 /// </summary> public class AES { /// <summary> /// 加密 /// ...
- 20款时尚的 WordPress 简洁主题【免费下载】
在这篇文章中,我们收集了20款时尚的 WordPress 简洁模板.WordPress 是最流行的博客系统,插件众多,易于扩充功能.安装和使用都非常方便,而且有许多第三方开发的免费模板,安装方式简单易 ...
- 分享最新15个加速 Web 开发的框架和工具
我们为开发人员挑选了15个最新的 Web 开发框架,你肯定尝试一下这些新鲜的框架,有的可能略微复杂,有的提供了很多的配置选项,也有一些窗口小部件和界面交互的选择.他们将帮助你创建更优秀的网站,提供给 ...
- 最简单的tab切换
JS: $(".con").eq(0).show(); $(".btn span").click(function(){ var num = ...
- 总结CSS3新特性(媒体查询篇)
CSS3的媒体查询是对CSS2媒体类型的扩展,完善; CSS2的媒体类型仅仅定义了一些设备的关键字,CSS3的媒体查询进一步扩展了如width,height,color等具有取值范围的属性; medi ...
- MSCRM 用户登录日志
MSCRM中关于用户登录信息,默认是不显示的,但是许多客户又有相关的需求. 下面将介绍给大家方法: 一.开启系统审核功能和用户访问审核. 二.打开设置中审核视图. 三.在过滤事件中选择“用户通过web ...
- 完美解决AutoCAD2012,AutoCAD2013本身电脑里有NET4.0或以上版本却装不上的问题
适用情况:电脑里本身有NET4.0或4.5版本,并且正确安装.或本身你就装有AutoCAD2013或AutoCAD2012要装AutoCAD2012或AutoCAD2013却装不上的情况 如图1所示. ...
- 【转】扫盲 同步利器、分布式网盘--BT Sync
原文地址:http://program-think.blogspot.com/2015/01/BitTorrent-Sync.html先向大伙儿宣布个好消息——经过多位热心读者的大力支持,经过几天的努 ...
- C C++ TDD单元测试非常好的书
http://product.china-pub.com/199003 测试驱动的嵌入式C语言开发 Test Driven Development for Embedded C <测试驱动的嵌入 ...