忧愁他整天拉着我的心,像一个琴师操练他的琴;悲哀像是海礁间的飞涛:看他那汹涌,听他那呼号!—— 徐志摩·四行诗一首

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 汇编(二)—— 寻址方式的更多相关文章

  1. 入门 ARM 汇编(一)—— 知识铺垫

    我读着史铁生的散文,零碎的牵扯起我生命中不曾出现过的记忆,一如北方的黄山厚土之中悠忽而来的忧伤的信天游,那些灿若信仰一样的阳光以及阳光下虔诚的子民.我想有一次远行,于细碎流淌的时光与路途之中,观察所有 ...

  2. GNU ARM汇编快速入门

    以前用ARM的IDE工具,使用的是ARM标准的汇编语言.现在要使用GNU的工具,当然要了解一点GNU ARM汇编的不同之处.其实非常的简单,浏览一下文档然后再看看程序就完全可以搞定了,或者你硬着头皮看 ...

  3. 经常使用ARM汇编指令

    一面学习,一面总结,一面记录. 以下是整理在网上找到的一些资料,简单整理记录一下,方便以后查阅. ARM处理器的指令集能够分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.载入/存储指令. ...

  4. ARM汇编指令集_学习笔记(1)

    一.什么是ARM汇编? 运行在ARM处理器上的汇编语言就叫ARM汇编. C程序运行在X86平台,底层就是X86汇编:运行在ARM平台,底层就是ARM汇编.ARM汇编与X86汇编有显著区别. X86属于 ...

  5. GNU ARM 汇编指令

    第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针.设置页表.操作 ARM的协处理器等.初始化完成后就可以跳转到C ...

  6. ARM汇编1

    一. 指令和伪指令 1.1. 指令 a. (汇编)指令是CPU机器指令的助记符,经过编译后会得到一串10组成的机器码,可以由CPU读取执行. 1.2. 伪指令 b. (汇编)伪指令本质上不是指令(只是 ...

  7. 嵌入式ARM汇编详解

    文章目录 零.预备知识 1.ARM与X86 2.ARM中指令的执行 3.ARM的九种寻址方式 立即数寻址 寄存器寻址 寄存器间接寻址 寄存器偏移寻址 寄存器基址变址寻址 批量寄存器寻址 相对寻址 堆栈 ...

  8. ARM汇编指令调试方法

    学习ARM汇编时,少不了对ARM汇编指令的调试.作为支持多语言的调试器,gdb自然是较好的选择.调试器工作时,一般通过修改代码段的内容构造trap软中断指令,实现程序的暂停和程序执行状态的监控.为了在 ...

  9. ARM汇编

    ARM汇编 ISA ISA即指指令集架构(Instruction Set Architecture)是与程序设计有关的计算机架构的一部分,包括本地数据类型.指令.寄存器.地址模式.内存架构.中断和意外 ...

随机推荐

  1. 十大Intellij IDEA快捷键

    转载:http://blog.csdn.net/dc_726/article/details/42784275 Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一 ...

  2. 使用CTE解决复杂查询的问题

    最近,同事需要从数个表中查询用户的业务和报告数据,写了一个SQL语句,查询比较慢: Select S.Name, S.AccountantCode, ( Select COUNT(*) from ( ...

  3. HBase集群安装过程中的问题集锦

    1.HRegionServer启动不正常 在namenode上执行jps,则可看到hbase启动是否正常,进程如下: [root@master bin]# jps26341 HMaster26642 ...

  4. <!DOCTYPE>

     定义和用法 所有浏览器都支持 <!DOCTYPE> 声明. <!DOCTYPE> 声明必须是 HTML 文档的第一行,位于 <html> 标签之前. <!D ...

  5. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q49-Q51)

    Question 49You are designing a SharePoint 2010 intranet site for a corporation. Your design must mee ...

  6. iOS React-Native入门指南之HelloWorld

    React-native 作为facebook开源项目,最近是火的一塌糊涂,它采用node.js能够写ios和android的native界面代码,简直是太酷了.支持动态更新,而且appstore 提 ...

  7. 操作系统开发系列—4.LDT

    一直以来,我们把所有的段描述符都放在GDT中,而不管它属于内核还是用户程序,为了有效地在任务之间实施隔离,处理器建议每个任务都应当具有自己的描述符表,称为局部描述符表LDT,并且把专属于自己的那些段放 ...

  8. 我的Android第三章:Android的组件介绍

    小编摘录了Android文档介绍Android四大组件的基本内容,感觉文档的内容写的很详细所以小编将它写入了博客 Android 使用Java语言开发.Android SDK 工具编译代码-以及任意数 ...

  9. 网络热恋之SDWebImage

    SDWebImage-master 是一个非常强大的三方. 当需要应用SDWeb时把文件夹里的SDWebImage文件夹放入工程里. 在需要使用网络获取图片的文件里进入头文件#import " ...

  10. AndroidStudio添加依赖库

    以Gson为例 Step1:点击下图中的入口,进入ProjectStructure Step2: 在app项中选择Dependencies窗口,点击右侧的加号 Step3:在搜索框中输入gson,点击 ...