快速轻量的x86/x86-64反汇编和代码生成库。
特性
- 支持所有x86和x86-64(AMD64)指令和扩展
- 针对高性能进行优化
- 无动态内存分配("malloc")
- 设计上线程安全
- 与其他常见反汇编库相比,文件大小开销很小
- 完整的doxygen文档
- 被许多主要开源项目信赖
- 完全没有第三方依赖 — 甚至不依赖libc
- 应该可以在任何有C11编译器的平台上编译
- 已在Windows、macOS、FreeBSD、Linux和UEFI上测试,包括用户模式和内核模式
示例
反汇编器
以下示例程序使用Zydis对给定的内存缓冲区进行反汇编,并将输出打印到控制台。
上述示例程序生成以下输出:
007FFFFFFF400000 push rcx
007FFFFFFF400001 lea eax, [rbp-0x01]
007FFFFFFF400004 push rax
007FFFFFFF400005 push qword ptr [rbp+0x0C]
007FFFFFFF400008 push qword ptr [rbp+0x08]
007FFFFFFF40000B call [0x008000007588A5B1]
007FFFFFFF400011 test eax, eax
007FFFFFFF400013 js 0x007FFFFFFF42DB15
编码器
上述示例程序生成以下输出:
48 C7 C0 37 13 00 00
更多示例
本仓库的examples目录中可以找到更多示例。
构建
有多种方法可以在您的系统上使用Zydis。以下小节列出了常用选项。
CMake构建
平台: Windows、macOS、Linux、BSD
您可以在所有支持的平台上使用CMake构建Zydis。 有关如何安装CMake的说明可以在这里找到。
git clone --recursive 'https://github.com/zyantific/zydis.git'
cd zydis
cmake -B build
cmake --build build -j4
Visual Studio 2022项目
平台: Windows
除了CMake构建逻辑外,我们还手动维护了一个Visual Studio 2022项目。
CMake生成的VS项目
平台: Windows
可以指示CMake为几乎任何VS版本生成Visual Studio项目。这里有一个视频指南,描述了如何使用CMake GUI生成这样的项目文件。不要被视频中明显使用macOS所迷惑:Windows只是在虚拟机中运行。
合并分发
平台: 任何有可用C11编译器的平台
我们提供了Zydis的自动生成单头文件和单源文件变体。要在您的项目中使用这个Zydis变体,您只需要将这两个文件复制到您的项目中。合并构建可以在我们的发布页面上找到,名为zydis-amalgamated.tar.gz
。
这些文件是使用amalgamate.py
脚本生成的。
包管理器
平台: Windows、macOS、Linux、FreeBSD
预构建的头文件、共享库和可执行文件可通过多种包管理器获得。
仓库 | 安装命令 |
---|---|
Arch Linux | pacman -S zydis |
Debian | apt-get install libzydis-dev zydis-tools |
Homebrew | brew install zydis |
NixOS | nix-shell -p zydis |
Ubuntu | apt-get install libzydis-dev zydis-tools |
vcpkg | vcpkg install zydis |
在CMake项目中使用Zydis
关于如何在您自己的基于CMake的项目中使用Zydis的示例可以在这个仓库中找到。
ZydisInfo
工具
ZydisInfo
命令行工具可用于查看Zydis提供的关于指令的几乎所有信息。
绑定
官方绑定适用于以下选定语言:
asmjit风格的C++前端
如果您正在寻找编码器的asmjit风格汇编器前端,请查看zasm。 zasm还为解码器和格式化器接口提供了惯用的C++包装器。
版本
方案
版本遵循语义版本控制方案。所有稳定性保证仅适用于API。ABI稳定性仅在补丁版本之间提供。
分支和标签
master
包含下一个未发布的Zydis版本的最新代码。预计会有更多的错误和问题,除非在标记的提交中,否则不保证API稳定性。- 稳定和预览版本用git标签标注
- beta和其他预览版本有
-beta
、-rc
等后缀
- beta和其他预览版本有
maintenance/v4
指向v4最新发布版本的代码- v4是最新的稳定主要版本,并接收功能更新
maintenance/v3
指向v3最新发布版本的代码- v3不会获得任何功能更新,但会接收安全更新直到2025年
maintenance/v2
指向v2最后一个遗留发布版本的代码- v2已经达到生命周期结束,不会接收任何安全更新
致谢
- Intel(开源XED,允许我们自动比较我们的表与他们的表,改进双方)
- LLVM(提供相当可靠的指令数据)
- Christian Ludloff (https://sandpile.org,非常有帮助)
- LekoArts(创建项目标志)
- 我们的GitHub贡献者
故障排除
共享库构建的-fPIC
/usr/bin/ld: ./libfoo.a(foo.c.o): relocation R_X86_64_PC32 against symbol `bar' can not be used when making a shared object; recompile with -fPIC
在某些情况下(例如,使用CMake将Zydis构建为静态库,然后使用Makefile手动将其链接到共享库中),CMake可能无法检测到必须发出重定位信息。可以通过向CMake调用传递-DCMAKE_POSITION_INDEPENDENT_CODE=ON
来强制执行此操作。
咨询和商业支持
我们为Zydis提供咨询服务和专业的商业支持。如果您需要自定义扩展、需要帮助将Zydis集成到您的产品中,或者只是想要合同保证的更新和周转时间,我们很乐意为您提供帮助!请通过business@zyantific.com与我们联系。
捐赠
捐赠通过flobernd的账户收集和分发。
许可证
Zydis采用MIT许可证。