逆向入门(2)汇编学习————基本概念介绍


一.汇编语言的概念

1.编译,汇编,反汇编的概念

(1)编译:将高级语言编写的源程序转变为二进制代码的可执行文件,binary文件,即目标文件。
(2)汇编:将汇编语言编写的源程序转变为二进制代码。
(3)反汇编:将二进制代码转换为汇编语言。
在这里插入图片描述

2.基本数据类型

(1)字节(byte):由8个二进制位(bit)组成,可以表示高级语言中的一个无符号整数,带符号数整数,或者一个字符数据(ASCII)。
(2)字(word):由两个字节组成,有16个二进制位(bit),可以表示高级语言中的一个无符号整数,带符号数整数,或一个汉字(国标码)。
(3)双字(double word):由两个字组成,有32个二进制位(bit),可以表示高级语言中的一个无符号整数,带符号数整数,浮点数,指针等。
(4)数据表示:10进制(默认进制),16进制(以h结尾),2进制(以b结尾)。

二.数据的存储

1.寄存器的概念

寄存器是cpu中特殊的存储单元,可以用来保存运算数据和运算结果,在汇编语言程序中,汇编指令使用寄存器的名字可以直接访问并读写寄存器中的当前数据。不寄存器的名字表示不同的数据类型如:8位(al),16位(ax),32位(eax),64位(rax)。寄存器共7种类型,包括:通用寄存器、段寄存器、指令寄存器、标志寄存器、控制寄存器、系统寄存器、调试寄存器以及测试寄存器。

2.内存空间

计算机内存空间划分为一个一个的基本内存单元,每一个内存单元保存8个二进制位(bit)构成一个数据,相邻的两个存储单元保存16个二进制位(bit)构成的一个数据。
每一个基本存储单元有一个唯一的地址,汇编语言程序根据这个地址可以读写存储单元中保存的数据。
内存单元的地址是一种按照字节顺序编址方法:(1)前一个存储单元和后一个存储单元相差1。(2)一个地址指定的一个存储单元保存一个字节数据。(3)一个地址指定的一个多字节数据保存在联系的多个存储单元中。
内存空间可以看作为一个很大的一维字节数组,把地址看作为标识数组元素的下标。
存储单元的地址是固定的,存储单元的数据可以通过程序进行修改。存储单元的地址是只读的,存储单元的数据是可读写的。

3.数据

(1)字节存储单元是基本的存储单元。一个字节存储单元8位数据的意义,根据需要可以有不同的解释。
(2)两个连续的字节存储单元构成一个字存储单元。字存储单元的地址是较低的字节存储单元的地址。
(3)四个连续的字节存储单元构成一个双字存储单元。(内存中按照小头位序排列)。
在这里插入图片描述

小头位序—举例 :

这里通过mov指令来体现:
在这里插入图片描述
观察到将2放到wx这个变量时0x0019FF24这个地址的值被修改,再查看内存中这个地址的值:
在这里插入图片描述
可以看到在内存中双字节的存储方式按照“高高低低”这种小头位序的方式存储的。

注意:

这里的vs2019需要做一些修改。
(1)首先运行的时候要选择release版本:
在这里插入图片描述
(2)然后在项目中选择项目属性:
在这里插入图片描述
(3)在C/C++关掉优化:
在这里插入图片描述
(4)在链接器中选中高级,关掉随机基址,打开固定基址。
在这里插入图片描述


评论
  目录