1 个稳定版本
1.0.0 | 2021年6月26日 |
---|
#5 在 #assume
11KB
161 行
iced-cpuid
显示x86/x64二进制文件使用的CPUID功能和指令编码。
它假定代码段中的所有字节都是代码。这并不总是正确的。如果您看到一些奇怪的指令,它可能被解码为指令的数据。
先决条件
构建
cargo install iced-cpuid
示例用法
显示/usr/bin/gcc
使用的所有CPUID功能
$ iced-cpuid /usr/bin/gcc
CET_IBT
CMOV
SSE
SSE2
XSAVE
显示指令
$ iced-cpuid /usr/bin/gcc -i
CET_IBT
ENDBR64
CMOV
CMOVA r32, r/m32
CMOVA r64, r/m64
CMOVAE r32, r/m32
[...]
SSE
MOVAPS xmm1, xmm2/m128
MOVAPS xmm2/m128, xmm1
MOVHPS xmm1, m64
[...]
显示指令、操作码和计数
$ iced-cpuid /usr/bin/gcc -ioc
CET_IBT
788 | F3 0F 1E FA | ENDBR64
CMOV
5 | o32 0F 47 /r | CMOVA r32, r/m32
53 | o64 0F 47 /r | CMOVA r64, r/m64
1 | o32 0F 43 /r | CMOVAE r32, r/m32
[...]
SSE
1 | NP 0F 28 /r | MOVAPS xmm1, xmm2/m128
278 | NP 0F 29 /r | MOVAPS xmm2/m128, xmm1
11 | NP 0F 16 /r | MOVHPS xmm1, m64
[...]
仅显示SSE
和SSE2
指令
$ iced-cpuid /usr/bin/gcc -i --cpuid SSE,SSE2
SSE
MOVAPS xmm1, xmm2/m128
MOVAPS xmm2/m128, xmm1
MOVHPS xmm1, m64
MOVUPS xmm1, xmm2/m128
MOVUPS xmm2/m128, xmm1
PREFETCHNTA m8
PREFETCHT0 m8
XORPS xmm1, xmm2/m128
SSE2
ADDSD xmm1, xmm2/m64
COMISD xmm1, xmm2/m64
CVTSI2SD xmm1, r/m64
DIVSD xmm1, xmm2/m64
MOVAPD xmm1, xmm2/m128
MOVD xmm, r/m32
[...]
CPUID功能名称
输出中显示的CPUID功能名称字符串以及作为输入使用(--cpuid XXX
)与iced-x86
中的枚举变体相同,请参阅其源代码或https://docs.rs/iced-x86/(搜索CpuidFeature
)。
类似程序
- elfx86exts(使用capstone) https://crates.io/crates/elfx86exts
依赖关系
~20MB
~401K SLoC