是什么运code FF350E204000吗? [英] what does opcode FF350E204000 do?
问题描述
我已经得到了32位运算code: 35 FF 20 0E 40 00
。是否有人知道一个好的作品code表,给一个答案? (我知道我可以使用反汇编器,但我想知道,如何与运算code表确定此)。我发现这网页,但也有 7不同的解决方案FF
。我没有得到它。
I've got the 32bit opcode: FF 35 0E 20 40 00
. Does anybody know a good OpCode table that gives an answer to this? (I know I could use a disassembler, but I'd like to know, how to determine this with an opcode table). I found this webpage, but there are 7 different solutions for FF
. I'm not getting it.
推荐答案
您正在寻找在错误的地方。你应该英特尔或AMD的官方文档中寻找此。
You're looking in the wrong place. You should looking this in Intel's or AMD's official documentation.
附录A运算code地图
英特尔®64的
表示, 2B卷
的和IA-32架构软件开发人员手册综合卷:1,2A,2B,3A和3B FF
是 INC / DEC Grp5
1A
。
Appendix A Opcode Map
of Vol 2B
of Intel® 64 and IA-32 Architectures Software Developer’s Manual Combined Volumes: 1, 2A, 2B, 3A and 3B
says that FF
is INC/DEC Grp5
1A
.
表A-6欧普code扩展为一个和两个字节操作codeS按组号
的2B卷
表示, FF
/ 第5组
或者 INC的
, DEC
, CALLN
, CALLF
, JMPN
, JMPF
, PUSH
,根据第5位通过在 MODR / M
字节3,后面的字节。 (0x35 >> 3)及7 = 6或二进制110。所以,这是 PUSH EV
。
Table A-6 Opcode Extensions for One- and Two-byte Opcodes by Group Number
of Vol 2B
says FF
/Group 5
either of INC
, DEC
, CALLN
, CALLF
, JMPN
, JMPF
, PUSH
, depending on bits 5 through 3 of the ModR/M
byte, the byte that follows. (0x35>>3)&7=6 or 110 in binary. So, this is PUSH Ev
.
第2章指令格式
解释的指令包括哪些部分,包括 MODR / M
字节,什么不是。
Chapter 2 Instruction Format
of Vol 2A
explains what parts an instruction consists of, including those ModR/M
bytes and what not.
附录A使用
:卷2B
告诉你的的运算code表
Ë
Appendix A Using Opcode Tables
of Vol 2B
tells you for E
:
一个MODR / M字节后面的运算code和指定操作数。操作数是一个通用寄存器或存储器地址。如果它是一个存储器地址,该地址是从段寄存器计算和任何下列值:一基址寄存器,一个变址寄存器,一个比例因子,位移
A ModR/M byte follows the opcode and specifies the operand. The operand is either a general-purpose register or a memory address. If it is a memory address, the address is computed from a segment register and any of the following values: a base register, an index register, a scaling factor, a displacement.
它还告诉你 v
:
字,双字或四字(64位模式),这取决于操作数大小属性。
Word, doubleword or quadword (in 64-bit mode), depending on operand-size attribute.
所以,你知道, EV
表示一个寄存器或内存操作数,因为这是32位code和没有指令prefixes ,操作数大小为32位。因此, EV
32位寄存器或内存中的32位变量。
So, you know that Ev
means a register or a memory operand and since this is for 32-bit code and there are no instruction prefixes, the operand size is 32 bits. So, Ev
a 32-bit register or a 32-bit variable in memory.
现在,你需要弄清楚从MODR / M字节的剩余部分才结束。
Now you need to figure out the rest of the bytes from ModR/M until the end.
看图2-1。英特尔64位和
。它会告诉你,在的IA-32架构指令格式
卷2A MODR / M
= 0x35:
Look at Figure 2-1. Intel 64 and IA-32 Architectures Instruction Format
of Vol 2A
. It tells you that in ModR/M
=0x35:
mod
= 00(二进制)结果注册
= 110(二进制;我们以前提取这3位)结果 R / M
= 101(二进制)
Mod
= 00 (binary)
Reg
= 110 (binary; we've extracted these 3 bits before)
R/M
= 101 (binary)
表2-2。 32位寻址形式与
告诉你,卷2A
的MODR / M字节mod
= 00且 R / M
= 101的手段 disp32
,IOW,有由32位内存操作数位移在指令
Table 2-2. 32-Bit Addressing Forms with the ModR/M Byte
of Vol 2A
tells you that Mod
= 00 and R/M
= 101 means disp32
, IOW, there's a memory operand consisting of a 32-bit displacement in the instruction.
在 MODR / M
字节的注册
字段已用来选择的七个指令之一,因此本场不带codeA寄存器操作数。
The Reg
field of the ModR/M
byte has already been used to choose one of the seven instructions and therefore this field does not encode a register operand.
所以,你的指令是 PUSH DWORD [0x0040200E]
。
和与我反汇编的输出一致。
And that agrees with my disassembler output.
这篇关于是什么运code FF350E204000吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!