前言:继前文( 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 Method和Codes 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直播授课