首页
社区
课程
招聘
[翻译]ARM汇编基础教程——ARM汇编简介
发表于: 2017-8-16 19:31 31560

[翻译]ARM汇编基础教程——ARM汇编简介

2017-8-16 19:31
31560

原文链接:https://azeria-labs.com/writing-arm-assembly-part-1/

最近在学IoT安全,这个教程挺不错的,边学边翻译出来,分享给大家。

          


原文链接:https://azeria-labs.com/writing-arm-assembly-part-1/

翻译:ljcnaix

欢迎来到系列文章《ARM汇编基础教程》。这个系列是为后续的《ARM漏洞利用教程》(连载中)打基础而编写的。在我们深入用ARM汇编编写shellcode和构造ROP链之前,我们需要先掌握一些ARM汇编的基础知识。

我们会一步一步覆盖如下主题:

第一篇: ARM汇编简介

第二篇: 数据类型和寄存器

第三篇: ARM指令集

第四篇: 内存读写

第五篇: 高级内存读写

第六篇: 条件分支

第七篇: 栈和函数

为了执行本文后续的示例,你需要搭建一个学习ARM汇编的实验环境。如果你没有一台ARM设备(比如树莓派),你可以根据这个教程(https://azeria-labs.com/emulate-raspberry-pi-with-qemu/)使用QEMU模拟器创建一台虚拟设备来配置你的实验环境。如果你缺乏使用GDB调试程序的基础知识,你可以在这片教程中学习(https://azeria-labs.com/debugging-with-gdb-introduction/)。在本系列教程中,我们将关注ARM 32-bit,所有的例子将按照ARMv6指令集编译。

这篇教程是为有兴趣学习基础的ARM汇编知识的人而写的。尤其是那些想在ARM平台编写漏洞利用的人。你可能已经发现ARM处理器在你的生活中无处不在。当我环顾我的身边,我发现我身边的大多数设备使用着ARM处理器而不是intel。这些设备包括我的手机、路由器以及最近销售火爆的IoT设备。可以说,ARM处理器已经成为了当世最广泛使用的CPU核心。随之而来的是和PC时代类似的问题,ARM设备也易于受到缓冲区溢出之类的攻击。由于被广泛的使用和潜在的脆弱性,针对这些设备的攻击将变得越来越常见。

目前在二进制安全领域,比起ARM平台,我们对x86/x64平台有深入的多的研究,即使ARM汇编可能是主流CPU指令集中最易学的。那么,为什么没有更多的人来关注ARM,研究ARM呢?可能因为漏洞利用的学习资料,大多数是针对Intel平台的,而很少针对ARM平台的。比如著名的由Corelan Team编写的Intel x86漏洞利用教程(https://www.corelan.be/index.php/2009/07/19/exploit-writing-tutorial-part-1-stack-based-overflows/),帮助了很多对二进制漏洞利用感兴趣的人,通过学习和实践这个教程包含的知识,进入这个领域。如果你对x86平台的漏洞利用感兴趣,Corelan Team的教程是非常好的起点。在这篇教程中,我们将关注ARM汇编的基础知识以及如何在ARM平台下编写漏洞利用。

ARM处理器和Intel处理器之间有很多的差异,其中最大的不同点就是它们的指令集。Intel是一个CISCComplex Instruction Set Computing,复杂指令集)处理器。因此它具有更庞大,功能更丰富的指令集,并且允许指令进行一些复杂的访存操作。它也因此具有支持更多的复杂操作和寻址方式,并且寄存器的数量比ARM要少的多。CISC处理器一般用在通用PC,工作站和服务器中。

ARM是一个RISCReduced Instruction Set Computing,精简指令集)处理器。因此它拥有一套精简的指令集(100个左右,甚至更少的指令)以及比CISC处理器更多的通用寄存器。与Intel处理器不同,ARM指令只处理寄存器中的数据,并使用了load/store结构访问存储器,也就是说只有load/store指令可以访问存储器。所以如果我们要增加某个内存地址中保存的值,至少需要三种类型的指令(load指令、加法指令和store指令),首先我们需要使用load指令将指定地址内存中的值加载到寄存器中,然后使用加法指令增加寄存器中的值,然后用store指令将寄存器中的值写回内存。

硬币有两面,精简指令集也有它的优势和劣势。其中一个重要的优势是指令可以被更快的执行(RISC处理器通过引入流水线机制,减少每个指令的占用的CPU的时钟周期来缩短执行时间)。它的劣势也很明显,较少的指令增加了软件(事实上是编译器)的复杂性。另一个重要的事实是,ARM具有两种运行模式(可以类比x86的实模式和保护模式),ARM模式和Thumb模式。Thumb指令可以是24个字节的(更多的细节将在第三篇:ARM指令集中介绍)。

ARMx86/x64之间更多的区别还包括:

·          ARM中大多数指令可以用于分支跳转的条件判断。

·          Intelx86/x64系列CPU是小端序的。

·          ARM架构在ARMv3之前是小端序的,在那之后,ARM处理器提供一个配置项,可以通过配置在大端和小端之间切换。

事实上,不仅ARM平台和Intel平台之间存在差异,ARM平台内部的不同版本之间也存在很多差别。我们努力让本系列教程尽可能通用,让你能对ARM平台有一个全面的了解。当你掌握了ARM基础之后,再去针对某个特定版本学习就轻松了。本教程的示例是在32 bit ARMv6(树莓派1代)上创建的,因此示例相关的讲解是针对这个版本的。

我们刚才谈到了ARM指令集有不同的版本,这可能使你感到困惑,我们用下表简单的表示ARM指令集版本和处理器版本之间的映射关系:

ARM 处理器家族

ARM指令集架构


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2018-3-27 21:27 被ljcnaix编辑 ,原因: 修正坛友指出的错误
上传的附件:
收藏
免费 11
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  CCkicker   +1.00 2017/08/25
最新回复 (36)
雪    币: 457
活跃值: (328)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢楼主的分享,mark。
2017-8-16 20:19
0
雪    币: 20
活跃值: (136)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享。
2017-8-16 21:10
0
雪    币: 334
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢分享
2017-8-17 08:31
0
雪    币: 223
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2017-8-17 09:00
0
雪    币: 92
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感谢分享!
2017-8-17 09:51
0
雪    币: 6790
活跃值: (4441)
能力值: (RANK:600 )
在线值:
发帖
回帖
粉丝
7
最好放到论坛上来,拷贝粘贴就可以搞定。
2017-8-17 10:07
0
雪    币: 237
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
多谢分享。已经下载。
2017-8-17 11:14
0
雪    币: 990
活跃值: (872)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
感谢分享!  mark
2017-8-17 13:37
0
雪    币: 175
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
多谢版主!!    正在学习!
2017-8-17 13:59
0
雪    币: 11314
活跃值: (2907)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
其它的内容什么时候可以放出来?
2017-8-17 16:19
0
雪    币: 41
活跃值: (823)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
感谢分享,持续关注
2017-8-18 08:45
0
雪    币: 4522
活跃值: (2146)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
好得不要不要的
2017-8-18 10:18
0
雪    币: 106
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
学习中
2017-8-18 10:32
0
雪    币: 11314
活跃值: (2907)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
简单易懂,讲得非常明白
2017-8-20 11:05
0
雪    币: 47147
活跃值: (20445)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
16
在学习的过程,将一些心得总结并分享出来,是一个很好的学习方法。
2017-8-24 10:40
0
雪    币: 233
活跃值: (112)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
楼主我是新手,请问学arm汇编是不是看armv8那本手册就行了?有5600多页,全是英文的,知乎是说看前面3000页就行了,要学这么多吗
2017-8-25 05:08
0
雪    币: 331
活跃值: (410)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
18
啰嘻哈呲吧 楼主我是新手,请问学arm汇编是不是看armv8那本手册就行了?有5600多页,全是英文的,知乎是说看前面3000页就行了,要学这么多吗
我觉得入门没必要翻手册,具体怎么学看你学习的目的,写boodloader和逆向的关注点有点不一样,最终都殊途同归,还是要翻手册的
2017-8-25 12:10
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
“汇编语言知识机器代码之上的一个简单语法层,它由映射了二进制机器码的助记符组成。”      这句话中  “知识”  应该是  “只是”  吧,楼主...
2017-8-29 10:21
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
不错吆!!!!!
2017-8-29 18:30
0
雪    币: 331
活跃值: (410)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
21
信梓 “汇编语言知识机器代码之上的一个简单语法层,它由映射了二进制机器码的助记符组成。” 这句话中 “知识” 应该是 “只是” 吧,楼主...
手残了==,已修改,感谢指正
2017-8-29 23:17
0
雪    币: 5855
活跃值: (438)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
22
翻译地不错,感谢
2017-8-31 10:01
0
雪    币: 14706
活跃值: (3165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
感谢分享。 
2017-8-31 20:27
0
雪    币: 22
活跃值: (139)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
感谢分享。
2018-1-15 18:08
0
雪    币: 930
活跃值: (1328)
能力值: ( LV15,RANK:750 )
在线值:
发帖
回帖
粉丝
25
感谢分享
2018-1-24 11:51
0
游客
登录 | 注册 方可回帖
返回
//