首页
社区
课程
招聘
[原创]IA-32指令解析之立即数
发表于: 2020-4-14 23:39 2828

[原创]IA-32指令解析之立即数

2020-4-14 23:39
2828

前言:继前文( https://bbs.pediy.com/thread-258804.htm )的内容,这次我们来学习一下IA-32指令的操作数和立即数的内容。

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

概念:立即数在指令组成中是一个可选项,当操作码的操作数为常量时,该常量被称之为立即数。下边的例子中的 0040B4A0就是立即数。

从下边的命令开始解析:

68  A0B44000    push 0040B4A0
与前文一样,我们先来查找表。

1. 第6行第8列。该位置有内容:push(d64),I(大写字母)z(小写字母)。

2. Push指令,有d64的标注。我们查看Table A-1. Superscripts Utilized in Opcode Tables


D64: When in 64-bit mode, instruction defaults to 64-bit operand size and cannot encode 32-bit operand size.
           在64位模式下,指令默认为64位操作数大小,且不能被编码为32位操作数大小。
对我们没有影响。

3. 我们要查看两个新的内容,分别使用大写字母和小写字母的Code for Addressing MethodCodes for Operand Type


I  Immediate data: the operand value is encoded in subsequent bytes of the instruction.
   立即数数据:该操作数的被编码在指令之后。

z   Word for 16-bit operand-size or doubleword for 32 or 64-bit operand-size
     16位模式为word大小,32位模式为dword大小或者64位操作数大小。

4.结合上述内容:68所对应的是:push lz是指push之后跟着32位下的4字节(0040B440),所以

解析为 push 0040B440


下边有2道题目练习,答案在二楼(PS:因为二楼不能贴图,所以有疑问的提出来,我会及时回复的。也请先生们指出我的问题所在)







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

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 83
活跃值: (1087)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
已阅
2020-4-15 00:23
0
游客
登录 | 注册 方可回帖
返回
//