VC中文网-VC-MFC编程论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1311|回复: 5
打印 上一主题 下一主题

ARM 汇编基础速成1:ARM汇编以及汇编语言基础介绍

[复制链接]

9

主题

41

帖子

22

金币

连长

Rank: 7Rank: 7Rank: 7

积分
123

新兵

跳转到指定楼层
楼主
发表于 2017-11-20 21:27:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

译者:arnow117

预估稿费:200RMB

投稿体例:发送邮件至linwei##,或登岸网页版在线投稿

写在前面

欢迎来到ARM汇编基础教程,这套教程是为了让你可以在ARM架构下进行漏洞利用打基础的。在我们能开始写ARM的shellcode以及构建ROP链之前,我们需要先学习相关的ARM汇编基础知识。

这些基础知识包含:

Part 1:ARM汇编介绍

Part 2:数据类型寄存器

Part 3: ARM指令集

Part 4: 内存相关指令:加载以及存储

Part 5:重复性加载及存储

Part 6: 分支和条件执行

Part 7:栈以及函数

为了能跟着这个系列教程脱手实践,你可以准备一个ARM的运行环境。如果你没有ARM设备(好比说树莓派或者手机),你可以通过QEMU来建立一个,[教程在这]。如果你对GDB调试的基础命令不熟悉的话,可以通过[这个]学习。在这篇教程中,我们的核心关注点为32位的ARM,相关的例子在ARMv6下编译。

为什么是ARM?

前面说过,本系列教程的核心目的,是为那些想学习在ARM架构下进行漏洞利用的人而准备。可以看看你身边,有几多设备是ARM架构的, 手机,路由器,以及IOT设备,很多都是ARM架构的。无疑ARM架构已经成了全世界主流而广泛的CPU架构。所以我们面对的越来越多的平安问题,也城市是ARM架构下的,那么在这种架构下的开发以及漏洞利用,也会成为一种主流趋势。

我们在X86架构上进行了很多研究,而ARM可能是最简单的广泛使用的汇编语言。可是人们为什么不关注ARM呢?可能是在intel架构上可供漏洞利用的学习资料比ARM多很多吧。好比[Corelan Team]写的很棒的intel X86漏洞利用教程,旨在帮忙我们可以更准确更高效的学习到关键的漏洞利用基础知识。如果你对x86漏洞利用很感兴趣,那我觉得Corelan Team的教程是一个不错的选择。可是在我们这个系列里,我们要创作发现一本高效的ARM架构下的漏洞利用新手手册。

ARM VS. INTEL

ARM措置器Intel措置器有很多不合,可是最主要的不合怕是指令集了。Intel属于复杂指令集(CISC)措置器,有很多特性丰富的拜候内存的复杂指令集。因此它拥有更多指令代码以及取址都是,可是寄存器比ARM的要少。复杂指令集措置器主要被应用在PC机,工作站以及办事器上。

ARM属于简单指令集(RISC)措置器,所以与复杂指令集先比,只有简单的差不多100条指令集,但会有更多的寄存器。与Intel不合,ARM的指令集仅仅操作寄存器或者是用于从内存的加载/贮存过程,这也就是说,简单的加载/存储指令即可拜候到内存。这意味着在ARM中,要对特定地址中存储的的32位值加一的话,仅仅需要从内存中加载到寄存器,加一,再从寄存器贮存到内存即可。

简单的指令集既有好处也有坏处。一个好处就是代码的执行变得更快了。(RISC指令集允许通过缩短时钟周期来加速代码执行)。坏处就是更少的指令集也要求了编写代码时要更加注意指令间使用的关系以及约束。还有重要的一点,ARM架构有两种模式,ARM模式和Thumb模式。Thumb模式的代码只有2或者4字节。

ARM与X86的不合还体现在:

ARM中很多指令都可以用来做为条件执行的判断依据

X86与X64机器码使用小端格式

ARM机器码在版本3之前是小端。可是之后默认采取年夜端格式,但可以设置切换到小端。

除以上这些ARM与Intel间的差别,ARM自身也有很多版本。本系列教程旨在尽力连结通用性的情况下来讲讲ARM的工作流程。并且当你晓得了这个形式,学习其他版本的也很容易了。在系列教程中使用的样例都是在32位的ARMv6下运行的,所以相关解释也是主要依烂魅这个版本的。

不合版本的ARM命名也是有些复杂:

写ARM汇编

在开始用ARM汇编做漏洞利用开发之前,还是需要先学习下基础的汇编语言知识的。为什么我们需要ARM汇编呢,用正常的酿成语言写不敷么?简直不敷,因为如果我们想做逆向工程,或者理解相关二进制程序的执行流程,构建我们自己的ARM架构的shellcode,ROP链,以及调试ARM应用,这些都要求先晓得ARM汇编。固然你也不需要学习的太过深入,足够做逆向工作以及漏洞利用开发方才好。如果有些知识要求先了解一些布景知识,别担忧,这些知识也会在本系列文章里面介绍到的。固然如果你想学习更多,也可以去本文末尾提供的相关链接学习。

ARM汇编,是一种更容易被人们接受的汇编语言。固然我们的计算机也不克不及直接运行汇编代码,还是需要编译成机器码的。通过编译工具链中as程序来将文件后缀为".s"的汇编代码编译成机器码。写完汇编代码后,一般保存后缀为".s"的文件,然后你需要用as编译以及用ld链接程序:
1
2
$ as program.s -o program.o
$ ld program.o -o program

汇编语言素质

让我们来看看汇编语言的底层素质。在最底层,只有电路的电信号。信号被格式化成可以转变的凹凸电平0V(off)或者5V(on)。可是通过电压转变来表述电路状态是繁琐的,所以用0和1来取代凹凸电平,也就有了二进制格式。由二进制序列组成的组合即是最小的计算机措置器工作单位了,好比下面的这句机器码序列就是例子。
1
1110 0001 1010 0000 0010 0000 0000 0001

看上去不错,可是我们还是不克不及记住这些组合的含义。所以,我们需要用助记符和缩写来帮忙我们记住这些二进制组合。这些助记符一般是连续的三个字母,我们可以用这些助记符作为指令来编写程序。这种程序就叫做汇编语言程序。用以代表一种计算机的机器码的助记符集合就叫做这种计算机汇编语言。因此,汇编语言是人们用来编写程序的最底层语言。同时指令的操作符也有对应的助记符,好比:
1
MOV R2, R1

现在我们知道了汇编程序是助记符的文本信息集合,我们需要将其转换成机器码。就像之前的,在[GNU Binutils]工程中提供了叫做as的工具。使用汇编工具去将汇编语言转换成机器码的过程叫做汇编(assembling)。

总结一下,在这篇中我们学习了计算机是通过由0101代表凹凸电平的机器码序列来进行运算的。我们可以使用机器码去让计算机做我们想让它做的事情。不过因为我们不克不及记住机器码,我们使用了缩写助记符来代表有相关功能的机器码,这些助记符的集合就是汇编语言。最后我们使用汇编器将汇编语言转换成机器可以理解的机器码。固然,在更高级另外语言编译生成机器码过程中,核心原理也是这个。

拓展阅读

1. [Whirlwind Tour of ARM Assembly.](https://www.coranac.com/tonc/text/asm.htm)

2. [ARM assembler in Raspberry Pi.](http://thinkingeek.com/arm-assembler-raspberry-pi/)

3. Practical Reverse Engineering: x86, x64, ARM, Windows Kernel, Reversing Tools, and Obfuscation by Bruce Dang, Alexandre Gazet, Elias Bachaalany and Sebastien Josse.

4. [ARM Reference Manual.](http://infocenter.arm.com/help/topic/com.arm.doc.dui0068b/index.html)

5. [Assembler User Guide.](http://www.keil.com/support/man/docs/armasm/default.htm)


更多内容回复查看:
游客,如果您要查看本帖隐藏内容请回复
C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

12

主题

53

帖子

130

金币

连长

Rank: 7Rank: 7Rank: 7

积分
153

小资土豪新兵

沙发
发表于 2017-11-20 21:27:55 | 只看该作者
我哭的小甲鱼的汇编基础讲的很是好虽说讲16位寄存器 可是最少让人多人容易理解 这里他用debug谅解以及编写  ……
C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

12

主题

45

帖子

25

金币

连长

Rank: 7Rank: 7Rank: 7

积分
129
板凳
发表于 2017-11-20 21:28:39 | 只看该作者
要死要死
C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

9

主题

44

帖子

19

金币

连长

Rank: 7Rank: 7Rank: 7

积分
123
地板
发表于 2017-11-20 21:29:06 | 只看该作者
感触感染好恐怖
C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

10

主题

37

帖子

22

金币

连长

Rank: 7Rank: 7Rank: 7

积分
105

社区QQ达人新兵

5#
发表于 2017-11-20 21:29:20 | 只看该作者
还是难
C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

0

主题

85

帖子

18

金币

团长

Rank: 10Rank: 10Rank: 10

积分
276

小资新兵社区QQ达人

6#
发表于 2018-4-2 01:00:48 | 只看该作者

C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

VC中文网 - 豫ICP备14012807号|小黑屋|联系客服|金币冲值|VC中文网

GMT+8, 2019-11-22 07:22 , Processed in 0.226563 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表
pk10投注技巧分享