文章目录
0x01 汇编语言
汇编语言类型:
-
机器语言
机器语言是机器能直接识别的程序语言或指令代码,无需经过翻译,每一操作码在计算机内部都有相应的电路来完成它,或指不经翻译即可为机器直接理解和接受的程序语言或指令代码。 -
汇编语言
汇编语言是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件加粗样式的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。 -
高级语言
高级语言是一种独立于机器,面向过程或对象的语言。高级语言是参照数学语言而设计的近似于日常会话的语言。
从下面这张图 可以更清楚地看到计算机里的语言的层级分布,首先在硬件的基础上是机器语言,机器语言可以直接转化为汇编语言,汇编语言又可以用人们可以理解的高级语言翻译,从而可以通过高级语言去编写程序、工具等。
0x02 进制转换
笔者认为,学好逆向工程的一个最大的帮助是熟悉进制转换,接触过逆向工程的小伙伴应该知道在逆向工程使用的工具中,经常见到进制转换,如果可以非常迅速的反应简直转化可以很大的帮助提高阅读印象工程代码的速度。
进制加减法
这个是在B站的一个老师那里看到的加法训练,只需要熟悉这两道题就可以很清楚的理解各种进制之间的加减乘除运算。
现在是一个外国大佬整理的逻辑单元运算流程,大题意思为,几乎所有的运算都是在中央处理单元中进行的,现在大部分的C P U都有自己的微处理单元,C P U U可以被分为很多很小的计算模块,例如逻辑门电路主要的运算功能,又可以进行加、或、否运算。
单位
单位分为:
- byte(字节)
- word(字)
- dword(双字)
0x03 寄存器
寄存器(register)是CPU(中央处理器)的组成部分,是一种直接整合到cpu中的有限的高速访问速度的存储器,用来暂时存放参与运算的数据和运算结果,因为寄存器的存储容量有限,只存储一些计算机频繁用到的数据存储在其中
- 一级缓存:CPU内部集成的缓存
- 二级缓存:CPU外部集成的缓存
CPU从寄存器拿数据,寄存器从高速缓存拿,以此类推
就是数据交换的缓冲区,当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。
AX为EAX的低16位的 “ 子寄存器 ”
AL为EAX低8位的 “ 子寄存器 ”
AH为AX高八位的“ 子寄存器 ”
0x04 进位标志
进位标志CF
由生成进位或借位的算术指令设置,当操作生成目标操作数进位或从目标操作数借位时设置。
奇偶标志PF
反映运算结果中“1”的个数的奇偶性
辅助进位标志AF
在发生下列情况时,辅助进位标志的值被置为 1, 否则其值为 0:
(1)、在字操作时,发生低字节向高字节进位或借位时
(2)、在字节操作时,发生低 4 位向高 4 位进位或借位时
零标志ZF
反映运算结果是否为 0
如果一个操作的结果是二进制零则其值为 1, 否则其值为 0——mov不算
符号标志SF
反映运算结果的符号位,它与运算结果的最高位相同
0是正的,1是负的
溢出标志OF
大多数算术指令设置这个位,表示结果太大,无法装入目标。设置后,它指示操作的结果太大或太小,无法装入目标操作数
方向标志DF
减——1
加——0
0x05 JCC