- 公开视频 -> 链接点击跳转公开课程
- 博客首页 -> 链接点击跳转博客主页
目录
一、进制基础
1. 什么是进制?
二、二进制、八进制、十六进制的定义和规则
1. 二进制 (Binary)
示例:
2. 八进制 (Octal)
示例:
3. 十六进制 (Hexadecimal)
示例:
三、进制映射关系
1. 二进制与八进制映射
示例:
2. 二进制与十六进制映射
示例:
四、进制运算原理
1. 二进制运算
五、进制转换算法
1. 任意进制 -> 十进制
示例:
2. 十进制 -> 任意进制
示例:
六、进制的拓展应用
进制的理解和运用是计算机科学中的基础技能,也是逆向工程的一项核心知识。
在逆向工程中,处理代码、数据、内存等信息时,广泛使用的是二进制、八进制和十六进制。
一、进制基础
1. 什么是进制?
进制指的是数的表示方式,决定了每位数字所能表示的符号数量。常见的进制包括:
- 二进制:基数为2,仅使用符号
0
和1
。 - 八进制:基数为8,使用符号
0 ~ 7
。 - 十进制:基数为10,使用符号
0 ~ 9
(我们日常使用的数制)。 - 十六进制:基数为16,使用符号
0 ~ 9
和A(10) ~ F(15)
。
在计算机领域,二进制是核心数制,但由于二进制表示较长,通常扩展使用十六进制和八进制作为简化形式。
二、二进制、八进制、十六进制的定义和规则
1. 二进制 (Binary)
- 基数:2
- 数字范围:0, 1
- 特点:计算机的基础语言,所有数据和指令以二进制形式存储和执行。
- 应用:逻辑运算、内存地址表示、机器码编写。
示例:
二进制数 1011
表示:
2. 八进制 (Octal)
- 基数:8
- 数字范围:0-7
- 特点:在Unix系统中用于表示权限设置。
- 应用:简化二进制的表示,3位二进制对应1位八进制。
示例:
八进制数 157
表示:
3. 十六进制 (Hexadecimal)
- 基数:16
- 数字范围:0-9, A-F
- 特点:常用于表示内存地址、颜色编码。
- 应用:简化二进制数据表示,4位二进制对应1位十六进制。
示例:
十六进制数 2F
表示:
三、进制映射关系
1. 二进制与八进制映射
二进制每 3位 转换成 1位八进制数字。
二进制 | 八进制 |
---|---|
000 | 0 |
001 | 1 |
010 | 2 |
011 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
示例:
二进制 110011
转换为八进制:
二进制分组: 110 011
转换为八进制:6 3
结果:63(八进制)
2. 二进制与十六进制映射
二进制每 4位 转换成 1位十六进制数字。
二进制 | 十六进制 |
---|---|
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | A |
1011 | B |
1100 | C |
1101 | D |
1110 | E |
1111 | F |
示例:
二进制 110110101
转换为十六进制:
二进制分组: 0001 1011 0101
转换为十六进制:1 B 5
结果:0x1B5(十六进制)
四、进制运算原理
除了进制之间的转换,理解进制运算在逆向工程中也非常重要。
1. 二进制运算
- 加法:
按位相加,进位规则与十进制相同。
-
逻辑运算(常见于位操作):
- AND(与
&
):只有两位都为1,结果才为1。 - OR(或
|
):只要两位有一个为1,结果就为1。 - XOR(异或
^
):两位不同,结果为1;相同则为0。 - NOT(取反
~
):将位上的0变为1,1变为0。
- AND(与
-
移位运算:
- 左移(
<<
):将所有位向左移动若干次,用0填充右侧。 - 右移(
>>
):将所有位向右移动若干次,用0或符号位填充左侧。
- 左移(
五、进制转换算法
1. 任意进制 -> 十进制
将每一位数字乘以对应进制的权值(幂),再求和。
示例:
二进制数 1101
转为十进制:
1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 8 + 4 + 0 + 1 = 13 结果:13(十进制)
2. 十进制 -> 任意进制
采用除基取余法,从高位到低位依次取商的余数。
示例:
十进制数 123
转换为二进制:
123 / 2 = 61 余 1 61 / 2 = 30 余 1 30 / 2 = 15 余 0 15 / 2 = 7 余 1 7 / 2 = 3 余 1 3 / 2 = 1 余 1 1 / 2 = 0 余 1 结果:1111011(二进制)
六、进制的拓展应用
-
计算机内存中的数据表示:
- 字节(Byte)和位(Bit):1字节通常表示8位的二进制。
- 地址:内存地址通常用十六进制表示,如
0x7FFF1234
。
-
字符编码
- ASCII:每个字符占用1个字节,十六进制应用广泛(如:
A -> 0x41
)。 - Unicode:支持更多字符,每个字符占用2字节或更多,十六进制如
U+0041
。
- ASCII:每个字符占用1个字节,十六进制应用广泛(如:
-
位图图像:
像素的颜色数据以二进制或十六进制储存,例如:- 黑色:
0x000000
- 白色:
0xFFFFFF
- 黑色:
-
逆向工程与调试:
- 反汇编代码:常用十六进制高效表示指令的机器码。
- 内存查看:调试器如IDA Pro和x64dbg中内存地址以十六进制显示。
-
加密与编码:
- 哈希值(Hash):如MD5输出为十六进制。
- Base64编码:原始数据以二进制表示,经过编码变为文本。