写在前面

  本笔记是由本人独自整理出来的,图片来源于网络。本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正。 如有好的建议,欢迎反馈。码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作。如想转载,请把我的转载信息附在文章后面,并声明我的个人信息和本人博客地址即可,但必须事先通知我

☀️ 指令编码(硬编码)的结构

羽夏笔记——硬编码(32位)-LMLPHP

☀️ 前缀指令是分组的

  1. LOCK和REPEAT前缀指令:
    LOCK(F0)、REPNE/REPNZ(F2)、REP/REPZ(F3)
  2. 段前缀指令:
    cS(2E)、SS(36)、DS(3E)、ES(26)、FS(64)、GS(65)
  3. 操作数宽度前缀指令:66
  4. 地址宽度前缀指令:67

☀️ PUSH/POP

☀️ INC/DEC

☀️ MOV Rb,lb

☀️ MOV ERX, ld

☀️XCHG EAX,ERX

☀️ 0x70 -0x7F

☀️ 0x0F 0x80- 0x0F 0x8F

☀️ 其他指令

☀️ 经典变长指令 ModR/M

羽夏笔记——硬编码(32位)-LMLPHP

☀️ 回顾ModR/M结构

1、Mod与R/M共同描述E的意义(内存或者通用寄存器)。
2、Reg/Opcode描述了G的意义(通用寄存器)。但3-5字段,并不仅仅用来标识寄存器,有些时候,用来标识Opcode。

☀️ RegOpcode

羽夏笔记——硬编码(32位)-LMLPHP

☀️ RegOpcode的举例说明

80 65 08 FF
查表步骤:
1、第一个字节为80查Table-2表,得到对应结构:Eb, Ib
2、第二个字节为MoR/M字段,所以拆分65得:01 100 101,Mod与R/字段查Table2-2得到对应的结构:[EBP+DIS8]
3、100字段查表TableA-6得到对应操作码为:AND
4、最终的指令格式:
AND [ebp+dis8], Ib
AND BYTE PTR SS:[EBP+08], 0xFF

☀️ 硬编码碎碎念

羽夏笔记——硬编码(32位)-LMLPHP

☀️ 指令长度不会超过15个字节,最少一个字节

☀️ 变长还是定长由opcode本身的值决定;没有ModR/M称之为定长。

09-10 13:47