今天来系统的学习汇编(Assembly)
这对一位逆向工程师和二进制安全工程师是必要的一步 也是不可或缺的一步 本专栏基于王爽老师的汇编语言教材进行
1.1 汇编语言的产生
汇编语言是这样来进行的
程序员 的代码 编写汇编指令后经过编译器后 被翻译成为机器码 然后计算机进行识别
1.2 汇编语言的组成
- 汇编指令:机器码的助记符,有对应的机器码
- 伪指令:没有对应的机器码,由编译器执行,计算机并不执行
- 其他符号:如"+-*/"
当然其核心为 汇编指令
指令和数据都在存储器中存放
对于指令和数据 说白了就是不同的表现形式
例如:
1000100111011000 -> 89D8H 此时表现为数据
1000100111011000 -> mov ax,bx 此时表现为指令
1.3存储单元
存储器被分为若干个单元,每个存储单元从0开始编号,假如说 一个存储器为128个存储单元 编号从0-127
如图所示
电子计算机的最小信息单位为比特 一个字节有8个bit(比特)
以微型计算机为例,每个单位可以存储1个Byte(字节)
也就是8个比特
所以这里的内存空间可以存 128个字节
1.3.1常用的单位换算
- 1KB=1024B
- 1MB=1024KB
- 1GB=1024MB
- 1TB=1024GB
1.4CPU读取数据的过程
如图所示
当CPU想要读取内存中第三块的内容的时候
- CPU先使用地址线将地址信息3发出
- CPU通过控制线发出内存读命令,读取第3块内存里的内容
- 存储器将第3块内存里的内容11通过数据线发送至CPU6
由于笔者的目的是为了更好的理解逆向中的寄存器等知识,所以这里对于计算机组成原理的部分不过与详细介绍了(地址线、数据线、控制线)
(地址数量=2^地址线数)
(数据量=数据线根数位 如 8根为 8位 典型的8088 CPU 16根为16位 8086cpu 分别为 1Byte 和 2Byte)