汇编基础-1

最近学习了一些汇编的基础,整理了一些笔记给大家,供大家参考。对于反病毒、逆向等方向而言,汇编确实是个好东西。

​    ​废话不多说,今天带来的内容主要为以下四个方面

二进制与十六进制的简要关系
有符号位和无符号位的编码规则
运算
通用寄存器

进制

	这里我们不去讲计算,因为每一种进制都是完美的,大家不应该去局限于进制的转换。这里简单的介绍一下二进制与十六进制的关系

​ ​ 二进制逢二进一,十六进制则是十六进一,所以二进制与十六进制的关系图如下
在这里插入图片描述

数据宽度

这里需要给大家简单介绍一下数据宽度的概念,计算机中常见的数据宽度如下所示

位(BIT)
字节(Byte)
字(Word)
双字(Dword/Doubleword)

在这里插入图片描述

如上图,可知 1双字=2字=4字节=32位
那么, 0001 其实可以成为半字节

存储范围

1字节(byte): 0 - 0XFF(十六进制) 0000 0000-FFFF FFFF(二进制)
1字(word): 0 -0XFFFF(十六进制)
1双字(Dword):0- 0XFFFFFFFF(十六进制)

无符号数编码规则

​在计算机语言里面,是区分有符号和无符号的,首先介绍无符号数,无符号数只有正数没有负数,所以他的值就是该数的本身,举例说明如下

1010 1010
十六进制表现为 9A(汇编里面的数值通常以十六进制展示)

有符号数 正数编码规则

有符号数正数编码规则与无符号数编码规则一致,最高位为0时为正数,最高位为1时为负数;在计算机中,所有的数值都是以补码的形式存储,而有符号数的正数的补码与原码相同,原码是除符号位(最高位)之外其余的值取绝对值。

举例说明如下

0001 1010
0X1A
正数的原码与本身相同
正数的反码与原码相同​
正数的补码与原码相同

此时最高位为0,该值为正值

有符号数 负数编码规则

有符号数负数的编码规则与正数编码规则不一样,首先最高位符号位的数值为1

-1 1000 0001

其次,​负数的原码与正数一样,保留符号位其余位取绝对值

8 ​bit举例
​​-1 1000 0001
原码
1000 0001​
反码 保留符号位,其余位取相反
1111 1110​
补码保留符号位,取反码 加 1
1111 1111​

用二进制表示正数不存在问题,但是在表示负数时会存在意想不到的困难,由于最高位为符号位,为负数的时候需要最高位占位1,导致可能无法展示的问题

4 bit示例
7 0111
-7 1111
如果-8呢? 1000 1111,可是如果不允许使用8 bit或者说32位,64位呢?

象限图

假设数据宽度为1 byte (8 bit)
盗的图哈(盗图狗在此,谁敢造次!)
在这里插入图片描述

假设数据宽度为 doubleword (32 bit)
在这里插入图片描述

运算

与运算

8 bit示例
只有两个数值的位比较都为1时,条件才成立
------0001 1010
and 1001 0010
----- 0001 0010

或运算

8 bit示例
两个数值的位比较有一个为1时,条件就成立
----0001 1010
or 1001 0010
— 1001 1010

异或运算

8 bit示例
两个数值的位比较不同时为1时,条件就成立
---- 0001 1010
xor 1001 0010
-----1000 1000

非运算

8 bit示例
0为1,1为0
not 1001 0010
----- 0110 1101​

移位运算(左移)

8 bit示例
移两位则高位11丢弃,01变成高位,缺少的低位补0
shl(<<) 1001 0010 左移两位为,0100 1000

移位运算(右移)

8 bit示例
shr无符号高位补0,sar有符号高位补符号位。符号位为1就补1,为0就补0
shr(>>) 1001 0010 右移两位为,0010 0100
sar(>>) 1001 0010 右移两位为,1110 0100

通用寄存器

今天先简单的介绍一下通用寄存器,如下图
在这里插入图片描述

这款工具是xdbg工具,支持32位以及64位的应用逆向分析;
该工具四个窗口分别是,反汇编窗口,寄存器窗口,内存窗口以及堆栈窗口。xdbg工具是目前比较新的工具,与以前的Dbdbg、Olly​dbg类似,但是语法以及使用方式略有区别,同时支持64位分析。

而今天先简单介绍一下通用寄存器的概念

EAX 累加计寄存器
EBX 基址寄存器
ECX 计数寄存器
EDX 数据寄存器
EBP 基址指针/栈底指针
ESP 堆栈指针/栈顶指针
ESI 源变址
EDI 目的地址 ​
EIP 指令指针寄存器,代表cpu下一次将执行的命令的内存地址
EFLAGS 标志寄存器,后续会详细讲解其各个位置代表的特殊含义

这里的通用寄存器是32位通用寄存器​
64位的长这样
在这里插入图片描述

这里我们​主要还是将32位的,在32位通用寄存器里我们又可以将他拆分为 32位、16位以及8位,其中8位的分为高八位以及低八位,对应十六位的AX/BX/CD/DX寄存器

32位 16位 8位(高8位) 8位(低8位)
EAX AX AH AL
EBX BX BH BL
ECX CX CH CL
EDX DX DH DL
ESP SP
EBP BP
ESI SI
EDI DI

16位对应32位如下图
在这里插入图片描述

8位分为高八位和低八位
在这里插入图片描述

寄存器之间可以直接赋值,但是位数必须一致,十六位只能给十六位赋值,八位只能给八位赋值,如下图,把bx值赋给cx

在这里插入图片描述

​好了,今天的内容就分享到这了,我尽量在占用三篇文章的篇幅的情况下将汇编常用的语句以及用法较为详细的分享给大家,至于为什么不上来就分析,因为我也不会,所以只能分享给大家基础,只有做好基础后期学会PE之后才能完整的去反汇编程序。

公众号回复 xdbg即可获取免安装工具,解压即用,64位请使用64位工具,32请使用32位工具。

​hash值
84447d78cc9a54a3f0fc7d824447c35655e4dd292856facd09fcaa6ba1664763
在这里插入图片描述

公众号:
我不懂安全

猜你喜欢

转载自blog.csdn.net/weixin_48421613/article/details/124163846