gpt4 book ai didi

assembly - x86 操作码指令解码

转载 作者:行者123 更新时间:2023-12-05 01:02:26 28 4
gpt4 key购买 nike

我一直在查看 x86 架构的软件开发人员手册,试图刷我的逆向工程技能。我知道该架构很复杂,并且向后兼容前几代。对于较新的一代,一些较旧的文档部分被遗漏了。但令人不安的解释和误解之一是与此类似的说明:

80 /2 ib

所以说明基于以下 80 OpCode 后面会跟着一个 MOD/RM/REG 字节。
无视旧内容的副作用之一,我不知道不同版本的 MOD/RM/REG 字节。但我一直认为它们是不同的,因为架构根源是 8/16 位。幸运的是,我在最初介绍架构时偶然发现了对 MOD/RM/REG 字节的剖析。

因此,上面提供的指令后跟正斜杠数字表示八进制值将包含在 MOD/RM/REG 字节的 RM 偏移量内将是值 2 .

我的实际问题如下:

MOD/RM/REG 字节中的 MOD 偏移量是否接受当前条件下的所有寻址模式,或者是否有任何强加的限制?
另一件事是否有人知道为什么用 /2 指定数字? ?这是否是假设在旧一代 ISA 中使用较低值并因此保留以实现向后兼容性的原因。

最佳答案

Instruction Prefix                0 or 1 Byte
Address-Size Prefix 0 or 1 Byte
Operand-Size Prefix 0 or 1 Byte
Segment Prefix 0 or 1 Byte
Opcode 1 or 2 Byte
Mod R/M 0 or 1 Byte
SIB, Scale Index Base (386+) 0 or 1 Byte
Displacement 0, 1, 2 or 4 Byte (4 only 386+)
Immediate 0, 1, 2 or 4 Byte (4 only 386+)

Format of Postbyte(Mod R/M byte from Intel-manual)
--------------------------------------------------
MM RRR MMM

MM - Memory addressing mode
RRR - Register operand address
MMM - Memory operand address

RRR Register Names
Filds 8bit 16bit 32bit
000 AL AX EAX
001 CL CX ECX
010 DL DX EDX
011 Bl BX EBX
100 AH SP ESP
101 CH BP EBP
110 DH SI ESI
111 BH DI EDI

---

16bit memory (No 32 bit memory address prefix)
MMM Default MM Field
Field Sreg 00 01 10 11=MMM is reg
000 DS [BX+SI] [BX+SI+o8] [BX+SI+o16]
001 DS [BX+DI] [BX+DI+o8] [BX+DI+o16]
010 SS [BP+SI] [BP+SI+o8] [BP+SI+o16]
011 SS [BP+DI] [BP+DI+o8] [BP+DI+o16]
100 DS [SI] [SI+o8] [SI+o16]
101 DS [DI] [DI+o8] [SI+o16]
110 SS [o16] [BP+o8] [BP+o16]
111 DS [BX] [BX+o8] [BX+o16]
Note: MMM=110,MM=0 Default Sreg is DS !!!!

32bit memory (Has 67h 32 bit memory address prefix)
MMM Default MM Field
Field Sreg 00 01 10 11=MMM is reg
000 DS [EAX] [EAX+o8] [EAX+o32]
001 DS [ECX] [ECX+o8] [ECX+o32]
010 DS [EDX] [EDX+o8] [EDX+o32]
011 DS [EBX] [EBX+o8] [EBX+o32]
100 SIB [SIB] [SIB+o8] [SIB+o32]
101 SS [o32] [EBP+o8] [EBP+o32]
110 DS [ESI] [ESI+o8] [ESI+o32]
111 DS [EDI] [EDI+o8] [EDI+o32]
Note: MMM=110,MM=0 Default Sreg is DS !!!!

---

SIB is (Scale/Base/Index)
SS BBB III
Note: SIB address calculated as:
<sib address>=<Base>+<Index>*(2^(Scale))

Fild Default Base
BBB Sreg Register Note
000 DS EAX
001 DS ECX
010 DS EDX
011 DS EBX
100 SS ESP
101 DS o32 if MM=00 (Postbyte)
SS EBP if MM<>00 (Postbyte)
110 SS ESI
111 DS EDI

Fild Index
III register Note
000 EAX
001 ECX
010 EDX
011 EBX
100 never Index SS can be 00
101 EBP
110 ESI
111 EDI

Fild Scale coefficient
SS =2^(SS)
00 1
01 2
10 4
11 8

关于assembly - x86 操作码指令解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26607462/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com