问题描述
长度反汇编器是否有可能在不支持像 VEX/EVEX/MVEX/XOP 前缀的指令的情况下正确识别指令的大小?
我问是因为我写了一个基本的长度反汇编器,但它只支持(x86和x86_64):
- 一般/系统说明
- x87 FPU
- MMX
- 上海证券交易所
- SSE2
- SSE3
- SSE4.1
- SSE4.2
- VMX
- SMX
整合 Intel/AMD 包含的每一个扩展需要相当多的时间+实际检查进行反汇编的 CPU 是否真的支持这些指令中的每一条,而 AFAIK 大多数 CPU 支持上述扩展。
>那么,在任何情况下,不受支持的指令是否会导致字节序列被解释为我支持的另一条指令,该指令的大小不同并且会弄乱以下所有指令?
我确实可以浏览冗长的 Intel 和 AMD 手册并进行一些思考,但是如果这里有人可以根据他们的知识快速给我一个直接的答案,我会更喜欢它。谢谢。
解决方法
无法识别 *VEX 编码的 x86-64 反汇编程序是废品;我认为你的问题的答案是否定。
幸运的是,剖析新前缀并不难,见AVX512 Chapter 4, 特别是如果您已经设法反汇编 SSE* 指令集。
Netwide Disassembler 可以为您提供很多帮助(尽管它会受到一些 bugs 的影响)。您可以使用它来验证您的产品是否正常工作。 根据 aspera ad astra!