17 个版本
0.3.2 | 2024 年 6 月 26 日 |
---|---|
0.2.8 | 2024 年 5 月 14 日 |
0.2.7 | 2021 年 8 月 22 日 |
0.2.5 | 2021 年 7 月 18 日 |
0.0.3 | 2020 年 1 月 20 日 |
#109 in 硬件支持
6,735 每月下载量
用于 29 个crates (25 个直接使用)
140KB
2K SLoC
yaxpeax-arch
架构定义、指令解码器和相关接口的共享特性,来自 yaxpeax 项目。
通常,只有当您正在编写代码以在实现 yaxpeax-arch
特性的多个架构上操作时,这个crate才有意义。例如,yaxpeax-dis 实现了通用的反汇编和显示逻辑,因此添加新的解码器通常只需一行或两行代码。
yaxpeax-arch
有几个crate特性,实现者也被鼓励支持
std
:选择加入std
特定支持 - 在此crate中,std
使DecodeError
具有对std::error::Error
的要求,使用户能够?
-unwrap 解码结果。color_new
:启用特性和结构体以格式化指令进行样式化,包括ANSI着色。:已弃用。启用基于colors
crossterm
的可选ANSI着色。当启用时,默认着色规则由ColorSettings
定义。address-parse
:启用对yaxpeax_arch::Address
从&str
解析的要求。这对于例如从人类读取地址的用例很有用。use-serde
:启用serde
序列化和反序列化边界类型,如Address
。
所有功能禁用时,yaxpeax-arch
的唯一直接依赖是 num-traits
,且适用于 #![no_std]
使用。
设计
yaxpeax-arch
有时会有向后不兼容的更改,但并不会造成太大的不兼容。这个crate的主要优点是 Arch
trait,为其他库构建架构无关功能。
对 yaxpeax-arch
的非平凡添加应包括一些讨论,并通过向crate的 docs/
添加来进行总结。你可能想知道,“讨论发生在哪里?”,目前的答案是我在(iximeow)的脑海中,或者各种discord/irc/discord/email对话中。如果未来有需要,yaxpeax
可能会发展出一个更一致的过程。
yaxpeax-arch
旨在支持架构支持的临时开发。各种架构crate的维护者可能不想实现所有可用的接口,也不必这样做。不完整的实现可能会对下游用户造成问题,但库的质量是通过人类对话来调节的,而不是通过 yaxpeax-arch
接口。对这些基本定义的扩展应考虑部分和不完整实现。
实现
已为许多架构实现了解码器,且完成程度各异。现在和未来,它们将在此列举
符号 | 含义 |
---|---|
🥳 | 完整、可靠 |
⚠️ | “完整”,可能存在差距 |
🚧 | 不完整 |
❓ | 未实现 |
架构 | 库 | 解码 | 测试 | 基准测试 | 注意 |
---|---|---|---|---|---|
x86_64 |
yaxpeax-x86 | 🥳 | 🥳 | 🥳 | |
x86:32 |
yaxpeax-x86 | 🥳 | 🥳 | ❓ | 不能禁用sse和sse2支持 |
x86:16 |
yaxpeax-x86 | 🥳 | 🥳 | ❓ | 不能禁用8086或286以上的指令 |
ia64 |
yaxpeax-ia64 | 🥳 | ⚠️ | ❓ | 缺乏良好的预测器使测试复杂化 |
armv7 |
yaxpeax-arm | 🚧 | 🚧 | ❓ | NEON尚未支持 |
armv8 |
yaxpeax-arm | 🚧 | 🚧 | ❓ | a32解码尚未支持,NEON不受支持 |
m16c |
yaxpeax-m16c | ⚠️ | 🚧 | ❓ | |
mips |
yaxpeax-mips | 🚧 | 🚧 | ❓ | |
msp430 |
yaxpeax-msp430 | 🚧 | 🚧 | ❓ | |
pic17 |
yaxpeax-pic17 | 🚧 | 🚧 | ❓ | |
pic18 |
yaxpeax-pic18 | 🚧 | 🚧 | ❓ | |
pic24 |
yaxpeax-pic24 | ❓ | ❓ | ❓ | 存在,但只解码 NOP |
sm83 |
yaxpeax-sm83 | 🥳 | 🚧 | ❓ | |
avr |
yaxpeax-avr | 🥳 | 🚧 | ❓ | 由 @the6p4c 贡献! |
sh /sh2 /j2 /sh3 /sh4 |
yaxpeax-superh | 🥳 | 🚧 | ❓ | 由 наб 贡献 |
MOS 6502 |
yaxpeax-6502 | ⚠️ | ❓ | ❓ | 由 @cr1901 贡献 |
lc87 |
yaxpeax-lc87 | 🥳 | ⚠️ | ❓ |
功能支持
yaxpeax-arch
定义了一些通常可选的功能,解码器也可以实现,除了简单的 (bytes) -> instruction
解码。这些是架构实现的 yaxpeax-arch
trait(或其集合),而不是crate功能。
description_spans
:实现了 AnnotatingDecoder
,用于解码指令,并显示输入比特流在位级上的具体含义。 contextualize
:实现了 ShowContextual
,用于用用户定义的信息代替默认指令数据来显示指令,通常预期显示标签名称而不是相对分支地址。我不推荐实现此特性,它需要重大的重新考虑。
架构 | description_spans |
contextualize |
---|---|---|
x86_64 |
🥳 | ❓ |
ia64 |
⚠️ | ❓ |
msp430 |
🥳 | ❓ |
mirrors
标准版 yaxpeax-arch
的副本在 https://git.iximeow.net/yaxpeax-arch。
yaxpeax-arch
还在 GitHub 上镜像,地址为 https://www.github.com/iximeow/yaxpeax-arch。
依赖项
~0.1–5.5MB
~10K SLoC