#architecture #instructions #disassembly #yaxpeax #disassembler #decoder #traits

no-std yaxpeax-arch

描述 yaxpeax 项目中架构的基本特性

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 硬件支持

Download history 2242/week @ 2024-04-23 2767/week @ 2024-04-30 2163/week @ 2024-05-07 2751/week @ 2024-05-14 2192/week @ 2024-05-21 2252/week @ 2024-05-28 1840/week @ 2024-06-04 1943/week @ 2024-06-11 1745/week @ 2024-06-18 1521/week @ 2024-06-25 1329/week @ 2024-07-02 1989/week @ 2024-07-09 2097/week @ 2024-07-16 1296/week @ 2024-07-23 1366/week @ 2024-07-30 1027/week @ 2024-08-06

6,735 每月下载量
用于 29 个crates (25 个直接使用)

0BSD 许可证

140KB
2K SLoC

yaxpeax-arch

crate documentation

架构定义、指令解码器和相关接口的共享特性,来自 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