一、如何计算ModRM

0X88 MOV Eb,Gb G:通用寄存器
0X89 MOV Ev,Gv E:寄存器/内存
0X8A MOV Gb,Eb b:字节
0X8B MOV Gv,Ev v:Word(16位),doubleword(32位),quadword(64位)

当指令中出现内存操作对象的时候,就需要在操作码后面附加一个字节来进行补充说明,这个字节被称为ModR/M。该字节的8个位被分成了三部分

7 ~ 6 5~3 2~0
Mod Reg/Opcode R/M

其中,Red/Opcode(第3,4,5位,共3个字节)描述指令中的G部分,即寄存器



Mod(第6,7位)和R/M(第0、1、2位)共同描述指令中的E部分,即寄存器/内存

二、计算ModRM(案例)

0X88	MOV Eb,Gb-->MOV Eb AL
解释:b表示字节且01换成二进制的3,4,5位为000所以查表可知为AL
88 01 00 000 01-->MOV byte ptr ds:[ecx],al
解释:01换成二进制,分成三部分分别查表,通过6,7和0,1,2为查表可知为ecx
0X89	MOV Ev,Gv-->MOV Eb EAX
89 01 00 000 01-->MOV dword ptr ds:[ecx],EAX
0X8A	MOV Gb,Eb-->MOV Gb al
8A 01 00 000 01-->MOV al,byte ptr ds:[ecx]
0X8B	MOV Gv,Ev-->MOV EAX Ev
8B 01 00 000 01-->MOV EAX,dword ptr ds:[ECX]

最新文章

  1. phpcms v9 中的数据库操作函数
  2. jQueryMobile示例页面代码
  3. 大熊君大话NodeJS之------Global Objects全局对象
  4. iOS开发——面试指导
  5. python【第二十篇】Django表的多对多、Ajax
  6. 添加、设置tabBarItem属性
  7. 人生苦短,python是岸.
  8. java xml 转 json
  9. SSM 设置静态资源处理
  10. Vue Router 路由实现原理
  11. [IOI2014]holiday假期(分治+主席树)
  12. async/await的特殊的地方
  13. poj3461
  14. Windows下Postgresql数据库的下载与配置方法
  15. Linux --- Ubuntu16.04.5 LTS 虚拟机安装后的软件安装基础操作总结
  16. web前端 -- onkeydown、onkeypress、onkeyup、onblur、onchange、oninput、onpropertychange的区别
  17. 九 ServerSocketChannel
  18. OpenMPI源码剖析4:rte.h 头文件的说明信息
  19. 关于C# yield 你会使用吗?
  20. 转载 关于include尖括号和双引号的区别。

热门文章

  1. Python3元组的简介和遍历
  2. sctf_2019_easy_heap(off-by-null在2.27的利用)
  3. CF363A Soroban 题解
  4. CF127A Wasted Time 题解
  5. SDP 格式解析
  6. python 豆瓣top250
  7. python requests库的简单运用
  8. IDEA中SpringBoot启动报错Error:(11, 39) java: 找不到符号
  9. JAVA获取html中的所有img链接
  10. Android NDK开发篇:Java与原生代码通信(数据操作)