【发布时间】:2011-12-31 01:43:35
【问题描述】:
在我为 x86 架构编写一个针对 linux 的小型反汇编程序的过程中,我遇到了一个小问题。这是关于强制前缀和重复前缀。查看英特尔文档 [1],据说重复前缀为 0xf2 或 0xf3,强制前缀为 0x66、0xf2 或 0xf3。
有两条指令具有以下基本操作码:
crc32 -- f2 0f 38 f0(这里,0xf2 是强制前缀)
movbe -- 0f 38 f0
因此,只要计数器寄存器非零就必须重复的“movbe”指令的操作码应该是:
repnz movbe == f2 0f 38 f0
当我开始反汇编一条指令时,如果看到字节0xf2,我怎么知道它是crc32的强制前缀指令但不是 movbe 指令的重复前缀,反之亦然?我将操作码模式 "f2 0f 38 f0" 匹配到哪条指令?
我错过了什么?
[1]http://www.intel.com/design/intarch/manuals/243191.HTM
感谢和问候,
赫里希凯什·穆拉利
【问题讨论】:
-
就 x86 反汇编程序而言,qemu 包含的反汇编程序是相当可读的。它使用@Karel 建议的方法来处理前缀。
标签: x86 opcode instruction-set prefixes