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

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

2017-8-16 19:31
32651

原文链接:11bK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2P5X3g2J5K9h3q4Q4x3X3c8D9j5h3u0K6i4K6u0W2j5$3!0E0i4K6u0r3N6%4u0A6N6r3W2F1k6#2)9J5k6r3q4J5L8g2)9J5k6r3q4K6M7$3g2E0j5X3I4&6i4K6u0V1M7r3q4J5N6q4)9J5k6o6q4Q4x3V1j5`.

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

          


原文链接:1beK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2P5X3g2J5K9h3q4Q4x3X3c8D9j5h3u0K6i4K6u0W2j5$3!0E0i4K6u0r3N6%4u0A6N6r3W2F1k6#2)9J5k6r3q4J5L8g2)9J5k6r3q4K6M7$3g2E0j5X3I4&6i4K6u0V1M7r3q4J5N6q4)9J5k6o6q4Q4x3V1j5`.

翻译:ljcnaix

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

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

第一篇: ARM汇编简介

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

第三篇: ARM指令集

第四篇: 内存读写

第五篇: 高级内存读写

第六篇: 条件分支

第七篇: 栈和函数

为了执行本文后续的示例,你需要搭建一个学习ARM汇编的实验环境。如果你没有一台ARM设备(比如树莓派),你可以根据这个教程(44aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2P5X3g2J5K9h3q4Q4x3X3c8D9j5h3u0K6i4K6u0W2j5$3!0E0i4K6u0r3k6h3#2#2L8r3q4@1k6g2)9J5k6s2u0S2M7%4m8T1k6i4u0J5P5g2)9J5k6s2m8A6i4K6u0V1N6$3W2@1K9q4)9J5k6s2q4W2L8i4g2Q4x3V1j5`.)使用QEMU模拟器创建一台虚拟设备来配置你的实验环境。如果你缺乏使用GDB调试程序的基础知识,你可以在这片教程中学习(7d5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2P5X3g2J5K9h3q4Q4x3X3c8D9j5h3u0K6i4K6u0W2j5$3!0E0i4K6u0r3k6r3g2T1N6h3N6Y4K9h3&6Y4i4K6u0V1N6$3W2@1K9q4)9J5k6r3N6V1j5W2)9J5k6r3W2F1N6s2u0G2k6s2g2U0N6r3W2G2L8W2)9J5c8R3`.`.)。在本系列教程中,我们将关注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漏洞利用教程(2f0K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2U0L8%4u0W2L8r3q4F1i4K6u0W2j5X3g2Q4x3V1k6A6L8X3c8W2P5q4)9J5k6i4m8Z5M7q4)9J5c8U0t1H3x3o6W2Q4x3V1j5H3y4#2)9J5c8U0p5&6i4K6u0r3k6i4S2H3L8r3!0A6N6q4)9J5k6s2N6J5K9i4c8A6L8X3N6Q4x3X3c8@1N6i4c8G2M7X3W2S2L8q4)9J5k6s2m8S2M7Y4c8Q4x3X3b7I4i4K6u0V1M7%4c8S2j5$3E0Q4x3X3c8T1j5i4y4W2k6q4)9J5k6r3!0$3k6i4u0X3L8r3!0%4M7#2)9J5c8R3`.`.),帮助了很多对二进制漏洞利用感兴趣的人,通过学习和实践这个教程包含的知识,进入这个领域。如果你对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指令集架构


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

最后于 2018-3-27 21:27 被ljcnaix编辑 ,原因: 修正坛友指出的错误
上传的附件:
收藏
免费 13
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  CCkicker   +1.00 2017/08/25
最新回复 (36)
雪    币: 467
活跃值: (634)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢楼主的分享,mark。
2017-8-16 20:19
0
雪    币: 20
活跃值: (256)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享。
2017-8-16 21:10
0
雪    币: 334
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢分享
2017-8-17 08:31
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2017-8-17 09:00
0
雪    币: 92
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感谢分享!
2017-8-17 09:51
0
雪    币: 6802
活跃值: (4480)
能力值: (RANK:600 )
在线值:
发帖
回帖
粉丝
7
最好放到论坛上来,拷贝粘贴就可以搞定。
2017-8-17 10:07
0
雪    币: 238
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
多谢分享。已经下载。
2017-8-17 11:14
0
雪    币: 990
活跃值: (1012)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
感谢分享!  mark
2017-8-17 13:37
0
雪    币: 195
活跃值: (185)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
多谢版主!!    正在学习!
2017-8-17 13:59
0
雪    币: 11810
活跃值: (3457)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
其它的内容什么时候可以放出来?
2017-8-17 16:19
0
雪    币: 41
活跃值: (1093)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
感谢分享,持续关注
2017-8-18 08:45
0
雪    币: 4576
活跃值: (2211)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
好得不要不要的
2017-8-18 10:18
0
雪    币: 106
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
学习中
2017-8-18 10:32
0
雪    币: 11810
活跃值: (3457)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
简单易懂,讲得非常明白
2017-8-20 11:05
0
雪    币: 58782
活跃值: (21900)
能力值: (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
雪    币: 332
活跃值: (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
雪    币: 332
活跃值: (410)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
21
信梓 “汇编语言知识机器代码之上的一个简单语法层,它由映射了二进制机器码的助记符组成。” 这句话中 “知识” 应该是 “只是” 吧,楼主...
手残了==,已修改,感谢指正
2017-8-29 23:17
0
雪    币: 5855
活跃值: (438)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
22
翻译地不错,感谢
2017-8-31 10:01
0
雪    币: 15725
活跃值: (4150)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
感谢分享。 
2017-8-31 20:27
0
雪    币: 22
活跃值: (139)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
感谢分享。
2018-1-15 18:08
0
雪    币: 930
活跃值: (1433)
能力值: ( LV15,RANK:750 )
在线值:
发帖
回帖
粉丝
25
感谢分享
2018-1-24 11:51
0
游客
登录 | 注册 方可回帖
返回