History of Assemble Language汇编语言的历史
- 在计算机最底层,是是由
电信号
组成的,而电信号是由0伏(off)
电压和5伏(on)
构成的,但是起伏的电压不太好分辨,所以引入二进制数字0和1
,有0和1分组形成的指令集就是计算机处理器的最小的工作单元
,如下:
1110 0001 1010 0000 0010 0000 0000 0001
但是这样的指令我们也很难看懂,所以我们引入助记符
,让一串特定的二进制指令有自己的别名
,通常有三个
字母组成,但是这不是规定(eg:mov, push)。
使用助记符也就是二进制指令的别名,来编写的程序,称之为汇编程序
,所以汇编语言是人类进行计算机编程的最低级别的语言。
我们编写好汇编程序,要让机器正常执行,中间就需要一个过程,汇编
,使用GNU Binutils将所有助记符(汇编语言)转化成机器码(eg:as file.s -o file.o
,然后ld file.o -o file
)。
GNU:一个自由的操作系统
Binutils:GNU提供的二进制工具集,其中就有汇编工具as
Compiled Language编译语言
在汇编语言之上就是结构化的编译语言了(eg:C),需要编译器
编译成机器码来运行(eg:gcc file.c -o file
)
Scripted Language脚本语言
再往上,就是一些脚本语言(eg:PHP,Java),这些语言需要通过解释器interpreter
来实现,这些解释器会配置好来运行特定的机器码来实现相应的效果。例如:Java底层是JVM虚拟机,里面有自己的一套指令集,但是最底层都是一样的。
高级语言的优势和不足
- 优势
编写速度快、维护简单 - 不足
运行慢、需要的计算机资源多。举个栗子,像GBA这种低配设备(16.7Mhz CPU and 工作内存:32KB+CPU内部专用 256KB)使用脚本语言的话,可能会直接蹦掉,所以绝大部分GBA使用C/C++
汇编语言的特点
汇编编程,你需要知道处理器是怎么工作的
并且用一种处理器明白的方法来编写写代码
,在高级语言中,这些工作是编译器或解释器做的
-
优点
1、没有编译、解释的过程,执行速度快。没有过多的环境依赖的需求,文件小
2、让你更了解CPU的功能
3、处理int型数据更快,汇编会告诉你原因
4、语句本身的简单性也具有美学品质:不会乱搞类,不同的循环样式,运算符优先级等 - 它是一行,一个操作码,并且从不超过少数几个参数。 -
缺点
没有高级语言的一些安全措施,所以更容易被破解,更危险
目标Purpose
- ARM和THUMB指令集的掌握、使用GCC让汇编C和汇编的混合代码
- 编写汇编Exploit
一些文档资料
- The rather large official ARM7DTMI Technical manual (PDF): DDI0210B_7TDMI_R4.pdf.
- GBATek instruction reference: ARM / THUMB.
- Official ARM quick-references (PDF): ARM + Thumb
- Re-eject's quick-references (PDF): GAS / ARM / THUMB. (note: minor syntax discrepancies at times)
- GNU Assembler manual: GAS.
Reference引用
https://azeria-labs.com/writing-arm-assembly-part-1/
https://www.coranac.com/tonc/text/asm.htm
网友评论