x86指令编码表

2023-12-27

我正在重写我的汇编程序。同时我也对实现反汇编感到好奇。我想让它变得简单和紧凑,并且在这样做时我可以利用一些概念。

可以从操作码确定 x86 指令编码的其余部分(也许也需要前缀字节)。我知道很多人都写了表格来做到这一点。

我对助记符不感兴趣,而是对指令编码感兴趣,因为这是一个实际的难题。对于每个操作码编号,我需要知道:

  • 该指令包含 modrm 吗?
  • 该指令有多少个立即数字段?
  • 立即使用什么编码?
  • 字段中的立即数是指令指针相对地址吗?
  • modrm 使用什么类型的寄存器作为操作数和寄存器字段?

sandpile.org 有相当多我需要的东西,但它的格式不容易解析。

在我开始自己编写和验证这些表格之前,我决定写这个问题。您知道某处存在这种表吗?采用不需要太多精力来解析的形式。

b   byte
w   word
v   word or dword (or qword), depends on operand size attribute (0x66)
z   word or dword (or dword), depends on operand size attribute
J   instruction-relative address (next character describes type)
G   instruction group, has modrm-field (next character describes operand type)
R   has modrm-field (next two characters describe register and operand type)
M   modrm, but operand field must point to memory
O   direct offset (next character describes type)
F   FPU
T   separate table
_   defined, but no arguments

x    0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
0  Rbb  Rvv  Rbb  Rvv    b    z            Rbb  Rvv  Rbb  Rvv    b    z         T
1  Rbb  Rvv  Rbb  Rvv    b    z            Rbb  Rvv  Rbb  Rvv    b    z
2  Rbb  Rvv  Rbb  Rvv    b    z            Rbb  Rvv  Rbb  Rvv    b    z
3  Rbb  Rvv  Rbb  Rvv    b    z            Rbb  Rvv  Rbb  Rvv    b    z
4    _    _    _    _    _    _    _    _    _    _    _    _    _    _    _    _
5    _    _    _    _    _    _    _    _    _    _    _    _    _    _    _    _
6    _    _  Mvv                             z Rvvz    b Rvvb
7   Jb   Jb   Jb   Jb   Jb   Jb   Jb   Jb   Jb   Jb   Jb   Jb   Jb   Jb   Jb   Jb
8  Gbb  Gvz  Gbb  Gvb  Rbb  Rvv  Rbb  Rvv  Rbb  Rvv  Rbb  Rvv       Mvv
9    _    _    _    _    _    _    _    _                        _    _    _    _
A   Ob   Ov   Ob   Ov    _    _    _    _    b    z    _    _    _    _    _    _
B    b    b    b    b    b    b    b    b    v    v    v    v    v    v    v    v
C  Gbb  Gvb    w    _                                            _    b    _    _
D   Gb   Gv   Gb   Gv                        F    F    F    F    F    F    F    F
E                                           Jz   Jz        Jb
F                        _    _   Gb   Gv    _    _    _    _    _    _   Gb   Gv

这里我得到了第一个操作数的表。格式是这样的表可以被解析 直接从包含它的文本文件中提取。我留下了一些 CISC 和分段相关的说明。

对于两字节指令,我可能需要四个这样的表。对于三字节指令,我还需要两个表。 FPU指令需要8个表,幸运的是非常简单。之后我就会覆盖相当大的 x86 指令块。不过我只吃一两张桌子就可以了。

此外,很少有指令组可能需要一些小数组来识别指令类型。


我相信参考x86asm.net http://ref.x86asm.net/可能有您正在寻找的东西。它是所有 x86-64 指令的列表,采用易于解析的 XML 格式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

x86指令编码表 的相关文章

随机推荐

  • 尝试在设备上运行 calabash-android 测试时出现“应用程序未启动(运行时错误)”

    我试图在连接到 Windows 7 笔记本电脑的 Samsung Galaxy S3 上运行一小部分初始的 calabash android 测试 并在尝试启动测试服务器时不断收到 应用程序未启动 运行时错误 消息 我安装了 Ruby v1
  • 使用 rmarkdown/knitr 将所有代码保存到最后

    我希望能够使用 knit rmarkdown 生成一个文档 将所有输出保留在一起 但将代码保留到最后 理想情况下作为各种引用的脚注 即可以查找每个图形或输出的代码在附录中使用脚注 这可能吗 如果我正确理解你的意思的话 您可以向原始代码块添加
  • Python 中正则表达式的使用令人困惑

    我对以下三种模式感到困惑 有人能更详细地解释一下吗 IPython with Python 2 7 3 In 62 re findall r a z f233op Out 62 f op why does the last come out
  • 计算阶乘结果的数字尾随零

    我正在尝试计算由阶乘产生的数字的尾随零 这意味着数字变得非常大 以下代码采用一个数字 计算该数字的阶乘 并计算尾随零 然而 当数量大约为25 numZeros 不起作用 public static void main String args
  • 字符串排序顺序(LC_COLLATE 和 LC_CTYPE)

    显然 PostgreSQL 从 8 4 版本开始允许每个数据库使用不同的语言环境 所以我去文档阅读有关语言环境的信息 http www postgresql org docs 8 4 static locale html 字符串排序顺序是我
  • 未找到 JNI_Onload() 且 VM 关闭

    我是安卓新手 我按照链接上的说明进行操作http marakana com forums android examples 49 html http marakana com forums android examples 49 html使
  • 如何使用另一个 XML 文件中的属性值作为当前 XML 中的元素值选择

    我有两个 XML 文件 一个是主 XML 文件 另一个用作查找表 这是主要的 XML
  • Kubernetes 中 subPath 和 mountPath 有什么区别

    我正在尝试将volumeMounts 中的文件添加到 dockerignore 并尝试了解subPath 和mountPath 之间的区别 阅读官方文档对我来说并不清楚 我应该从我读到的内容中添加 mountPath 是 pod 中将挂载卷
  • 如何使用 Jackson 解析不合格的 JSON 数组?

    因此 我正在访问第三方 API 它为我提供了这个 JSON 对象 但我花了很长时间试图找到一种使用 Jackson 解析资源子对象的优雅方法 我假设我必须编写一个自定义反序列化器 尽管我想知道是否还有其他方法 somekey someval
  • XSLT 节点值比较

    如何将 IP 地址与家庭和姓名参考进行比较 使用 XSLT 文件 在详细信息中 我有一个 xml 文件 其中包含操作员站节点列表 每个操作员站都有其唯一的信息 因此 通过将第一个操作员站节点视为主站 比较所有剩余的从属操作员站信息 首先需要
  • HTTP 持久连接

    尝试使用 Linux 套接字接口用 C 语言实现一个简单的 HTTP 服务器时 我在我希望它具有的某个功能 即持久连接 方面遇到了一些困难 使用单独的 TCP 连接一次发送一个文件相对容易 但这似乎不是非常有效的解决方案 例如考虑多次握手
  • 字符串常量池中的 new String("") 会发生什么

    如果我创建一个字符串对象 String s new String Stackoverflow 将只在堆中创建 String 对象 或者也在 String 常量池中创建一个副本 提前致谢 如果调用 则只能将字符串放入常量池中intern或使用
  • 为什么 Moq 不运行重写的 ToString 方法?

    在下面的代码中为什么mockTest ToString 返回Null 编辑 在示例代码中添加注释以显示如何解决问题 Public Sub Main Try Dim test New TestClass If test ToString lt
  • 如何给Python程序添加暂停模式

    我已经开发了一个 Python 代码 正在寻找改进以及如何添加暂停选项 尽管我不知道更简单的方法 但我还是一遍又一遍地重复完全相同的行 import math pygame random sys turtle from itertools
  • mapView 已弃用方法 getZoomControls?

    我正在尝试让默认缩放控件显示在谷歌地图视图上 我在看this http mobiforge com developing story using google maps android代码 但 getZoomControls 已被弃用 我尝
  • WinRT 投影类型文档

    有一种东西叫做预测类型在 WinRT 中 例如 在元数据中 IXamlType UnderlyingType定义为 TypeName UnderlyingType get 然而 当在 C 应用程序中使用时 它会发生如下变化 Type Und
  • 自定义 Flask 管理行操作

    我想在烧瓶管理列表视图上的编辑和删除图标旁边添加另一个按钮 此外 我想将该行数据作为发布请求发送到路线 我知道我必须编辑admin model list html模板 但我不知道如何添加此功能 你能提供任何指导吗 您需要为您的视图定义自定义
  • 如何使用 Typesafe Activator UI 在开发模式下运行 play 项目

    我正在使用 Typesafe Activator 1 2 10 我使用模板 play scala 中的 activator ui 创建了一个新项目 当我单击开始时 游戏正在产品模式下运行 我想在开发模式下运行它 如何使用 activator
  • 将单元格位置字符串解析为行和列

    i have string col AB21 这是 Excel 单元格位置 我想将其解析为string column AB int row 21 我怎样才能做到这一点 string col AB21 int startIndex col I
  • x86指令编码表

    我正在重写我的汇编程序 同时我也对实现反汇编感到好奇 我想让它变得简单和紧凑 并且在这样做时我可以利用一些概念 可以从操作码确定 x86 指令编码的其余部分 也许也需要前缀字节 我知道很多人都写了表格来做到这一点 我对助记符不感兴趣 而是对