opcode

文章目录

    • opcode
  • opcode表
  • 前缀
  • ModR/M
  • 练习
  • 需要记住

操作码就是机器码。最多6部分,最长15字节。php虚拟机(zend vm)、jvm中的最小操作单元都可以成为opcode。

opcode由以下域组成:

prefixes - opcode - ModR/M - SIB - displacement - immediate

opcode是必须的。

0x40 inc eax _emit(0x40)

与指令并非简单的一一对应关系:

90 nop
90 xchg eax, eax

SIB:scale(比例因子), index, base。它们加上立即数(immediate)可以组成最复杂的相对基址变址寻址。

opcode表

一字节:高四位作为行索引,低四位作为列索引。

0F二字节指令:使用第二个字节的高四位和低四位作为行列索引。

一字节表OF表格为2-byte escape (Table A-3)

0F38、0F3A三字节指令:使用第三个字节的高四位和低四位。


观察一字节表,可以发现,这些指令都遵循寄存器编号的顺序来为汇编指令设计编码的,而寄存器编号如下:

hex 000 001 010 011 100 101 110 111
r8 al cl dl bl ah ch dh bh
r16 ax cx dx bx sp bp si di
r32 eax ecx edx ebx esp ebp esi edi
Segments DS ES FS GS SS CS IP

操作数格式为Zz,

  • 大写Z为寻址方式,比如,G是由ModR/M的reg指定寄存器,E是由ModR/M的R/M指定操作数;
  • 小写z为操作数类型,比如,v表示word/dword/qword

常用寻址方式:

  • A,直接寻址,没有ModR/M字节
  • E, ModR/M的R/M域指定寄存器或内存地址。
  • F,EFLSGS/RFLAGS
  • G, ModR/M的Reg域指定寄存器.
  • I, 立即数
  • S,ModR/M的Reg域指定段寄存器.

常用操作数类型:

  • b, 1 byte
  • w, word
  • d, dword, 4 bytes
  • dq, dqword, 16 bytes
  • q, qword, 8 bytes
  • qq, qqword, 32 bytes

前缀

前缀(Prefixes)的大小为1Byte,用于描述指令的前缀情况,他们可以被划分为5个集合:

  • 66:切换操作数大小
  • 67:切换地址大小
  • F2/F3:重复操作前缀
  • 2E/36/3E/26/64/65:修改默认段(段超越)
  • F0:锁定前缀

段超越:

  • 2E - CS
  • 36 - SS
  • 3E - DS
  • 26 - ES
  • 64 - FS
  • 65 - GS

一个OpCode可能会有几个Prefixes,顺序可能打乱。

40               INC EAX
66 40          INC AXF3 66 AD      REP LODSW
F2 AC            REPNE LODSB8B 03             MOV EAX, [DWORD DS:EBX]
658B 03        MOV EAX, [DWORD GS:EBX]

如果Prefixes不能对随它之后的OpCode起作用,那么它就会被忽略。

8AC1            MOV AL, CL
66 BAC1       MOV AL, CL

ModR/M

OPCode的主要解析逻辑都集中在ModR/M域,通过对照Intel的opcode解析OPCode中的ModR/M域就能确定指令的具体格式。

练习

02 1B

02:add Gb, Eb

1B: 00 011 011

mod:00 ebx, ebx

add bl, [ebx]


2E:8925 00112233 mov dword ptr cs:[33221100], esp


查一下0F指令:2-byte escape

需要记住

  • E8 : call 立即数
  • E9 : jmp
  • FF15 : CALL 地址

FF15需要查询Table A-6, opcode extensions…

0040103B      E8 00000000        call    00401040
00401040      FF15 00112233      call    dword ptr [33221100]
00401046    - E9 00112233        jmp     3362214B

intel opcode相关推荐

  1. 20179311《网络攻防实践》第九周作业

    网络攻防课本第九章总结 1.恶意代码定义 恶意代码指的是使计算机按照攻击者的意图执行以达到恶意目标的指令集.首先恶意代码是一组指令集,恶意代码的实现方式可以多种多样,如二进制执行文件.脚本语言代码.宏 ...

  2. 20159313网络攻击与防范第九周学习总结

    网络攻防课本第九章总结 1.恶意代码定义 恶意代码指的是使计算机按照攻击者的意图执行以达到恶意目标的指令集.首先恶意代码是一组指令集,恶意代码的实现方式可以多种多样,如二进制执行文件.脚本语言代码.宏 ...

  3. 全网最硬核PWN入门_图解分析

    PWN 序 Linux环境下的基础知识 从C源码到可执行文件的生成过程 程序的编译与链接 什么是可执行文件 可执行文件分类PE/ELF ELF文件格式 区分节和段的存储区域 加载ELF / 查看节和段 ...

  4. 《翻译》Intel 64 与 IA-32 架构软件开发者手册卷1翻译

    <前言> 翻译自官方的PDF版手册,可以从下述站点下载英文原版: http://www.intel.com/content/www/us/en/processors/architectur ...

  5. java opcode 反汇编,OPCode详解及汇编与反汇编原理

    1. 何为OPCode 在计算机科学领域中,操作码(Operation Code, OPCode)被用于描述机器语言指令中,指定要执行某种操作的那部分机器码,构成OPCode的指令格式和规范由处理器的 ...

  6. OPCode详解及汇编与反汇编原理

     1. 何为OPCode 在计算机科学领域中,操作码(Operation Code, OPCode)被用于描述机器语言指令中,指定要执行某种操作的那部分机器码,构成OPCode的指令格式和规范由处 ...

  7. Opcode指令解析

    2.1            实模式,保护模式,以及虚拟8086模式指令格式 Intel-64和IA-32架构指令编码是图2-1所示格式的子集.一条指令包括可选的指令前缀(顺序任意),主操作码(最多3 ...

  8. 【翻译】 Intel(R) 800 Series序列网卡 ice 驱动安装

    概述 ======== 此驱动程序支持内核版本3.10.0及更新版本.但是,有些功能可能需要更新的内核版本.关联的虚拟功能(VF)驱动程序对于这个驱动程序,是iavf.可以使用ethtool.lspc ...

  9. 什么是OpCode?

    什么是OpCode? 不管计算机技术的发展如何日新月异,其最基本的东西是不会突然改变的.OpCode就是这其中的一样东西--因此,Bill Gates的这句话用在这里并不太合适. 在开始回答什么是Op ...

最新文章

  1. Windows10 Postgres11 安装 The Database cluster initialisation failed
  2. hadoop命令帮助
  3. Android属性动画 PropertyValuesHolder
  4. flask运行多个服务器,与Flask服务器同时运行while循环
  5. django快捷复习手册
  6. 有り様、状態、様子 の 区別
  7. 解决Git报“OpenSSL SSL_read: Connection was reset, errno 10054”错的问题
  8. 微信小程序导航:官方文档+精品教程+demo集合(6月12日更新)
  9. ArcGIS模型构建器计算几何的方法
  10. ppt 计算机图标不见了,显示桌面图标不见了如何恢复.ppt
  11. 计算机管理如何格式化u盘,详细教您如何格式化u盘
  12. 怎么登录163vip邮箱,登录方式有哪些?
  13. 苹果可以访问linux的smb,Samba For iOS让iPhone使用网上邻居使用体验教程
  14. 计算机毕业设计(附源码)python智慧医疗系统
  15. mkv视频格式转换mp4格式
  16. 西北乱跑娃 --- bottle框架部署pytorch模型
  17. Mac快捷键大全(常用的可以修改)
  18. js和css实现圆形表盘时钟
  19. lede 增加新固件型号
  20. AS3.6.1 65535

热门文章

  1. 芒果改进YOLOv5系列:原创结合Conv2Formers改进结构,Transformer 风格的卷积网络视觉基线模型,超越ConvNeXt结构
  2. 科沃斯扫地机器人电路原理图_科沃斯扫地机器人的工作原理及维修方法
  3. 三菱PLC控制步进驱动器脉冲定位相关(附代码接线图)
  4. 苹果Safari怎么打开html,苹果内置safari浏览器怎么用?safari浏览器详细使用教程...
  5. MyBatis 遇到 Error updating database.问题
  6. 搜狗输入法自定义短语使用小技巧
  7. Bezier曲线生成【计算机图形学】
  8. 使用 commit tran 需注意
  9. 重装系统重启后出现booting windows_电脑重装系统教程来了,Win10 20H2正式版安装图解...
  10. 《生物化学与分子生物学》----蛋白质----听课笔记(六)