本文档提供了从源代码构建 Ghidra 的全面说明。它涵盖了先决条件、构建过程、常见任务和故障排除技巧,以帮助开发人员在不同平台上成功编译和打包 Ghidra。有关创建 Ghidra 扩展的信息,请参阅 创建扩展。
在构建 Ghidra 之前,您需要确保您的开发环境满足以下要求:
| 要求 | 版本/详情 |
|---|---|
| JDK | 21 (64位) |
| Gradle | 8.5+(如果可用网络连接,也可以使用提供的 wrapper) |
| Python | 版本 3.9 至 3.13,包含 pip |
| 特定平台工具 | 见下文 |
Linux/macOS
Windows
构建 Ghidra 涉及几个关键步骤,从获取依赖项到组装最终分发包。
来源:README.md43-79 build.gradle gradle/root/distribution.gradle
首先,克隆 Ghidra 仓库或下载源代码。
或者,您可以从 GitHub 下载源代码 ZIP 文件。
Ghidra 需要几个不在 Maven Central 中的外部依赖项。这些必须使用特殊的 Gradle 任务下载。
此脚本将在仓库根目录的 dependencies 目录中下载所需的依赖项。
来源:README.md66-70 gradle/support/fetchDependencies.gradle DevGuide.md32-36
下载 Maven Central 依赖项并设置仓库以进行开发
默认情况下,这些依赖项将存储在 $HOME/.gradle/。
要为您的当前平台构建 Ghidra,请执行:
这将创建一个压缩的分发包到仓库根目录的 build/dist/,可以在构建它的平台上运行。
来源:DevGuide.md77-80 README.md74-77
Ghidra 的构建系统主要基于 Gradle,并组织成一个分层的任务结构。
来源:gradle/root/distribution.gradle642-720
要为所有支持的平台构建 Ghidra,请添加 allPlatforms 属性。
这将创建一个可以在任何支持的平台上运行的分发包。请注意,您必须安装构建所需平台的相应工具。
来源:gradle/root/distribution.gradle647-656
Ghidra 构建系统包含几个有用的 Gradle 任务,用于开发和分发。
| 任务 | 描述 |
|---|---|
gradle cleanEclipse eclipse | 生成 Eclipse 项目文件。 |
gradle buildNatives | 为您的当前平台构建原生组件。 |
gradle sleighCompile | 手动编译 sleigh 文件。 |
gradle createJavadocs | 构建 Javadoc。 |
gradle buildPyPackage | 为 PyGhidra 和 Debugger 构建 Python 包。 |
gradle assembleAll | 将 Ghidra 构建到 build/dist,以未压缩的形式。 |
gradle buildGhidra | 将 Ghidra 构建到 build/dist,以压缩形式。 |
构建任务之间存在相互依赖关系,如图所示。
来源:build.gradle104-113 gradle/root/distribution.gradle642-720
Ghidra 包含原生代码,必须为每个目标平台进行编译。构建过程通过特定平台的任务来处理这个问题。
构建系统支持多个平台,这些平台在 nativePlatforms.gradle 文件中定义。
| 平台 | 架构 | 操作系统 |
|---|---|---|
| win_x86_64 | x86-64 | Windows |
| linux_x86_64 | x86-64 | Linux |
| mac_x86_64 | x86-64 | macOS |
| mac_aarch64 | AArch64 | macOS |
| linux_aarch64 | AArch64 | Linux |
| freebsd_x86_64 | x86-64 | FreeBSD |
| freebsd_aarch64 | AArch64 | FreeBSD |
来源:GPL/nativePlatforms.gradle GPL/nativeBuildProperties.gradle25-35 Ghidra/Features/PDB/buildNatives.gradle Ghidra/Features/PDB/src/pdb/pdb.vcxproj
在 Windows 上构建时,系统使用 Visual Studio 来编译原生组件。配置通过 vsconfig.gradle 脚本自动处理,该脚本会检测已安装的 Visual Studio 版本。
对于 PDB 支持,构建系统使用 Visual Studio 来编译 PDB 解析器。
vswhere.exe 来检测 Visual Studio 安装。来源:GPL/vsconfig.gradle Ghidra/Features/PDB/buildNatives.gradle Ghidra/Features/PDB/src/pdb/pdb.vcxproj
Ghidra 通过 PyGhidra 集成 Python,这需要构建 Python 包。
Python 包构建过程包括:
来源:Ghidra/Features/PyGhidra/build.gradle89-102 gradle/hasPythonPackage.gradle
| 问题 | 解决方案 |
|---|---|
| 缺少 Visual Studio 组件 | 确保您已安装所有必需的组件(MSVC、Windows SDK、C++ ATL)。 |
| 未找到 Python | 安装 Python 3.9-3.13 并确保它在您的 PATH 中。 |
| 非英语区域设置导致 Gradle 问题 (Linux) | 设置 LC_MESSAGES=en_US.UTF-8 环境变量。 |
| 缺少 pip | 使用 python -m venv 创建 Python 虚拟环境。 |
| Eclipse 项目错误 | 使用 gradle cleanEclipse eclipse 清理并重新生成 Eclipse 项目文件。 |
如果您在构建 Python 包时遇到问题:
python --version 验证 Python 版本(必须是 3.9-3.13)。python -m pip --version 检查 pip 是否已安装。来源:DevGuide.md404-409 README.md47-50
为离线开发做准备
这确保了所有依赖项都已本地可用。
用于在持续集成环境或 Docker 容器中运行构建。
从源代码构建 Ghidra 可以提供灵活性,并能够根据特定需求定制软件。基于 Gradle 的构建系统以跨平台一致的方式处理依赖项、编译和打包。通过遵循本文档中概述的步骤,您应该能够成功地从源代码构建 Ghidra。
有关其他帮助和信息,请参阅仓库中的《开发者指南》(DevGuide.md)。