经典变长指令-ModRM
2024-09-08 17:28:16
一、如何计算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]
最新文章
- phpcms v9 中的数据库操作函数
- jQueryMobile示例页面代码
- 大熊君大话NodeJS之------Global Objects全局对象
- iOS开发——面试指导
- python【第二十篇】Django表的多对多、Ajax
- 添加、设置tabBarItem属性
- 人生苦短,python是岸.
- java xml 转 json
- SSM 设置静态资源处理
- Vue Router 路由实现原理
- [IOI2014]holiday假期(分治+主席树)
- async/await的特殊的地方
- poj3461
- Windows下Postgresql数据库的下载与配置方法
- Linux --- Ubuntu16.04.5 LTS 虚拟机安装后的软件安装基础操作总结
- web前端 -- onkeydown、onkeypress、onkeyup、onblur、onchange、oninput、onpropertychange的区别
- 九 ServerSocketChannel
- OpenMPI源码剖析4:rte.h 头文件的说明信息
- 关于C# yield 你会使用吗?
- 转载 关于include尖括号和双引号的区别。
热门文章
- Python3元组的简介和遍历
- sctf_2019_easy_heap(off-by-null在2.27的利用)
- CF363A Soroban 题解
- CF127A Wasted Time 题解
- SDP 格式解析
- python 豆瓣top250
- python requests库的简单运用
- IDEA中SpringBoot启动报错Error:(11, 39) java: 找不到符号
- JAVA获取html中的所有img链接
- Android NDK开发篇:Java与原生代码通信(数据操作)