# E9Patch 静态二进制重写工具

> 面向 x86-64 Linux ELF 可执行文件和共享库的静态二进制重写工具，无需恢复控制流即可插入插桩代码，并生成可直接替换原文件的二进制，方法源自 PLDI 2020 论文《无需控制流恢复的二进制重写》。前端 e9tool 用一套基于反汇编属性的匹配语言选择指令，再通过内置跳板、调用以 e9compile.sh 编译的 C/C++ 函数或手写的插件跳板进行修补；后端 e9patch 接收 JSON-RPC 命令，便于其他工具调用。可选模式包括借助启发式控制流恢复获得更快的重写结果，或借助 SIGILL 回退实现完全的修补覆盖。

- 类型：工具
- 目标：二进制
- 类别：调试与动态分析
- 关联：基础工具
- 来源复核于：2026-10-19
- 收录于：2026-10-19
- 原始资源：<https://github.com/GJDuck/e9patch>
- 一手来源：<https://github.com/GJDuck/e9patch/blob/682ab1f7f0480aa45edf1fd94457e5ee2dd01043/README.md>
- 目录页面：<https://awesomerea.org/zh/resources/e9patch/>
- 记录 JSON：<https://awesomerea.org/resources/e9patch/record.json>
- 英文版：[English](https://awesomerea.org/resources/e9patch/index.md)

## 使用条件与局限

- 审阅时最新版本为 v1.0.1，发布于 2026-06-22，提供 amd64 Debian 软件包；此前 1.0.0 的候选版本一直发布到 rc10（2025-04-16），v1.0.0 于 2026-03-01 发布。所审阅的 master 提交（2026-06-28）比 v1.0.1 多一个提交，修复了跳板模板条目为空时的未定义行为，其 VERSION 文件为 1.0.1。
- build.sh 在检查 gcc、g++、make、binutils、xxd、markdown 和 zlib 头文件后构建 e9patch 与 e9tool，并提示对应的 Debian/Ubuntu 软件包名；Zydis 与 libdw 以源码形式随附在 contrib 目录下。修补函数需用 e9compile.sh 以 gcc 和独立环境（freestanding）编译选项编译。README 面向 x86_64 Linux；源码中另有 PE 处理代码和一个自称概念验证的 Windows 示例，但使用指南未作说明。
- 输入为用户自己的 ELF 可执行文件或共享库，默认输出到 a.out 或 a.so。指南指出内置的线性反汇编器可能错误处理代码与数据混杂的二进制，因此支持通过 --use-disasm 和 --use-targets 读入其他分析工具生成的 CSV 文件。CFR 模式基于启发式，稳健性较低；在 -100 模式下，被重写的程序自行安装 SIGILL 处理函数时会以 ENOSYS 失败。
- GPL-3.0 许可证，examples/stdlib.c 等个别文件按其文件头声明采用 MIT。

## 一手来源

1. <https://github.com/GJDuck/e9patch/blob/682ab1f7f0480aa45edf1fd94457e5ee2dd01043/README.md>
2. <https://github.com/GJDuck/e9patch/blob/682ab1f7f0480aa45edf1fd94457e5ee2dd01043/doc/e9tool-user-guide.md>
3. <https://github.com/GJDuck/e9patch/blob/682ab1f7f0480aa45edf1fd94457e5ee2dd01043/doc/e9patch-programming-guide.md>
4. <https://github.com/GJDuck/e9patch/blob/682ab1f7f0480aa45edf1fd94457e5ee2dd01043/build.sh>
5. <https://github.com/GJDuck/e9patch/blob/682ab1f7f0480aa45edf1fd94457e5ee2dd01043/e9compile.sh>
6. <https://github.com/GJDuck/e9patch/blob/682ab1f7f0480aa45edf1fd94457e5ee2dd01043/examples/win64_demo.c>
7. <https://github.com/GJDuck/e9patch/blob/682ab1f7f0480aa45edf1fd94457e5ee2dd01043/examples/stdlib.c>
8. <https://github.com/GJDuck/e9patch/tree/682ab1f7f0480aa45edf1fd94457e5ee2dd01043/contrib>
9. <https://github.com/GJDuck/e9patch/blob/682ab1f7f0480aa45edf1fd94457e5ee2dd01043/LICENSE>
10. <https://github.com/GJDuck/e9patch/releases/tag/v1.0.1>
11. <https://github.com/GJDuck/e9patch/compare/v1.0.1...682ab1f7f0480aa45edf1fd94457e5ee2dd01043>

## 相关条目

依据相同的代码仓库或论文标识关联。

- [无需控制流恢复的二进制重写](https://awesomerea.org/zh/papers/paper-e9patch/index.md) · 研究论文

## 同分区更多条目：原生二进制

- [Rellic LLVM bitcode 转 C 反编译器](https://awesomerea.org/zh/resources/rellic/index.md) · 工具
- [ghidra-delinker-extension Ghidra 目标文件反链接扩展](https://awesomerea.org/zh/resources/ghidra-delinker-extension/index.md) · 工具
- [BinExport 反汇编导出插件](https://awesomerea.org/zh/resources/binexport/index.md) · 工具
- [Karta 开源库匹配插件](https://awesomerea.org/zh/resources/karta/index.md) · 工具
- [VTIL-Core 虚拟机翻译中间语言核心库](https://awesomerea.org/zh/resources/vtil-core/index.md) · 工具
- [Frida Workbench VS Code 扩展](https://awesomerea.org/zh/resources/vscode-frida/index.md) · 工具

## 关于此条目

说明已依据一手来源复核。
原创说明采用 MIT 许可；外部项目、论文与素材保留各自的权利和许可。
