首页
社区
课程
招聘
[原创]IA-32指令解析之操作码
发表于: 2020-4-13 14:08 3574

[原创]IA-32指令解析之操作码

2020-4-13 14:08
3574

概念:IA-32指令(Inter Architecture,32-bit)。顾名思义,32运算的英特尔体系结构指令集。简而言之,是指CPU所使用的指令。比如在OD ,IDA打开某个程序我们可以看到:

图中使用紫红色圈起来的地方


从上边两张图我们可以发现:

1. 每条指令都是由十六进制数构成

2. 指令有长有短。

我们都知道,从开始编写代码我们使用的是高级语言(比如 C++),在之后高级语言会被转换成计算机能识别的二进制语言0和1,这个过程我们称之为编译,而完成这个转化过程的程序,我们称之为编译器。  但是,单纯的0和1对于我们来说是难读懂的,因此,我们将其转换为可读性较高的16进制数。

那指令为什么有长有短呢?这就涉及到了IA-32指令格式的相关知识了。请看下图:


从图中我们可以看出:

[Prefixes][Opcode][ModR/M][SIB][Displacement][Immediate]

一条指令由这六个部分组成,但其中某些部分是可选的。所以这也就是指令会有长短之别的原因。

接下来,我们开始对指令的每个部分进行解析。


操作码(opcode)

操作码是指令中必不可少的部分。操作码比如:mov cmp push等等都是都是大家所熟知的汇编指令。操作码的长度大部分为1个字节(8位,两个16进制),少部分是2个字节,而3个字节长度的操作码则用在MMX中,一般很少遇到,这边不再详细说明。

首先我们从一条长度为1个字节的指令来对操作码部分进行解析。

41 INC ECX

41:查找单字节操作码映射表第4行第1列。

解析步骤如下:

1. 找第4行第1列的位置。

2. 我们发现指向的是 ecx REX.B。这里表明了操作操作数。

3. 我们再看看3,4标注箭头处的内容:INC(i64)和REX(o64);从下图标记处我们可以发现:

I64:The instruction is invalid or not encodable in 64-bit mode. 40 through 4F (single-byte INC and DEC) are REX prefix combinations when in 64-bit mode (use FE/FF Grp 4 and 5 for INC and DEC).
    该指令在64位模式下无效或不可编码。在64位模式下40到4F(单字节INC和DEC)是REC前缀组合。
o64: Instruction is only available when in 64-bit mode.
      命令只在64位模式下有效。

显而易见,o64告诉我们REX是在64位下使用的,所以在这里,他不是操作数REX。

而064说的是:在64位模式下40到4F(单字节INC和DEC)是REC的前缀组合一部分,也就说在不是64位模式下,指的是单字节INC和DEC。所以INC(i64)指的便是操作码INC

4.所以,41表示的是 INC ECX指令。


----------------------------------------------------------------------------------------------------------------

下边有2个练习,将十六进制转换成相应的汇编指令

49
46

答案在二楼。


总结:上述图片表格是intel官方手册内容。附件上传了intel官方手册。

建议把我所提到的页数内容打印下来,一来查阅方便,二来纸质资料比较好加深印象。页数如下:40-41 2129-2131 2134-2340 2146-2147

下期见。






[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 603
活跃值: (376)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
2
49  dec ecx 
46  inc esi
回帖好像不能上传图片。请自己查看单字节操作码映射表。intel手册  P2135后
除了操作数换成esi,其余部分同上。
2020-4-13 14:12
0
雪    币: 83
活跃值: (1087)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
49 第四行 第九列?第九列在哪里 你给的图片没有啊
2020-4-13 22:19
0
雪    币: 603
活跃值: (376)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
4
killpy 49 第四行 第九列?第九列在哪里 你给的图片没有啊
因为这个映射表是有多个的(按范围划分),有第4行第9列的内容在上传的手册里的2136页,先生可以自行查阅。
2020-4-13 22:51
0
雪    币: 3190
活跃值: (2864)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
5
谢谢前辈分享
2020-4-17 17:49
0
游客
登录 | 注册 方可回帖
返回
//