
图1-1验算二进制(一)

图1-2验算二进制(二)
2.十六进制与二进制的转换
由于一个简单的数值用二进制表示需要很长的位数,这样对于阅读很不方便,因此汇编和调试器常用十六进制表示二进制。十六进制的每个位可以代表4个二进制位,因为2的4次方刚好是16。这样,在二进制与十六进制之间就产生了一个很好的对应关系,如表1-2所列。
表1-2二进制对应的十六进制与十进制数

根据此表,我们可以很快地把二进制和十六进制进行转换,把上例的二进制10010011转换成十六进制,转换过程如下:
第一步,把10010011从最低开始按每四位分为一组,不足四位前面补0,划分结果为1001 0011;
第二步,把划分好的组进行查表,1001对应十六进制是9,0011对应的十六进制是3。
那么,二进制10010011转换成十六进制后的值是93。读者可以通过计算器自行进行验算。
在逆向中常用的就是二进制与十进制的转换,或者是二进制与十六进制的转换,其他的转换方式读者可以自行查找资料进行学习。关于十六进制和二进制需要记住的重要一点就是,一位十六进制数可以表示四位二进制数。
1.2数据宽度、字节序和ASCII码
前面介绍了计算机中常用的进制表示方法和转换,现在读者知道了计算机存储的都是二进制的数据,那么接下来要讨论的是在计算机中数据存储的单位以及数据是如何存储在存储空间的。
1.2.1数据的宽度
数据的宽度是指数据在存储器中存储的尺寸。在计算机中,所有数据的基本存储单位都是字节(byte),每个字节占8个位(位是计算机存储的最小单位,而不是基本单位,因为在存储数据时几乎没有按位进行存储的)。其他的存储单位还有字(word)、双字(dword)和八字节(qword)。

图1-3 给出各个存储单位所包含的位数。
在计算机编程中,常用的几个重要数据存储单位分别就是byte、word和dword,这几个存储单位稍后我们会使用到。
1.2.2数值的表示范围
在计算机中存储数值时,也是要依据前面介绍过的数据宽度进行存储的,那么在存储数据时由于存储数据的宽度限制,数值的表示也是有范围限制的。那么byte、word和dword能存储多少数据呢?我们先来计算一下,如果按位存储的话,能存储多少个数据,再分别来计算以上三种单位能够存储的数值的范围。
计算机使用二进制进行数据存储时,一位二进制最多能表示几个数呢?因为是二进制数,只存在0和1两个数,所以一位二进制数最多能表示两个数,分别是0和1。那么,两位二进制最多能表示几个数呢?因为一位二进制数能表示两个数,所以两位二进制数则能表示2的2次方个数,即4个数,分别是0、1、10、11。进一步地,三位二进制数能表示的就是2的3次方个数,即8个数,分别是0、1、10、11、100、101、110、111。
上面的过程可以整理成表1-3。
表1-3N位二进制位能够表示的数

![]()
2的8次方是256,为什么数值只有0~255个呢?因为计算机计数是从0开始,从0到255同样是256个数,这里的2的8次方表示能够表示数值的个数,而不是能够表示数值的最大的数。
1.2.3字节序
字节序也称为字节顺序,在计算机中对数值的存储有一定的标准,而该标准随着系统架构的不同而不同。了解字节存储顺序对于逆向工程是一项基础知识,在动态分析程序的时候,往往需要观察内存数据的变化情况,这就需要我们在掌握数据的存储宽度、范围之后,进一步了解字节顺序。
通常情况下,数值在内存中存储的方式有两种,一种是大尾方式,另一种是小尾方式。关于字节序的知识,通过一个简单的例子就可以掌握。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-59929-2.html
到时候什么国际法
我们闷头建岛
看过【超级战舰】吗