菜单

构建Ghidra

相关源文件

本文档提供了从源代码构建 Ghidra 的全面说明。它涵盖了先决条件、构建过程、常见任务和故障排除技巧,以帮助开发人员在不同平台上成功编译和打包 Ghidra。有关创建 Ghidra 扩展的信息,请参阅 创建扩展

先决条件

在构建 Ghidra 之前,您需要确保您的开发环境满足以下要求:

要求版本/详情
JDK21 (64位)
Gradle8.5+(如果可用网络连接,也可以使用提供的 wrapper)
Python版本 3.9 至 3.13,包含 pip
特定平台工具见下文

特定平台要求

Linux/macOS

  • make, gcc/g++ 或 clang

Windows

  • Microsoft Visual Studio 2017+ 或 Microsoft C++ Build Tools,并包含以下组件:
    • MSVC
    • Windows SDK
    • C++ ATL

来源:README.md47-55

构建过程概述

构建 Ghidra 涉及几个关键步骤,从获取依赖项到组装最终分发包。

来源:README.md43-79 build.gradle gradle/root/distribution.gradle

设置构建环境

1. 克隆仓库

首先,克隆 Ghidra 仓库或下载源代码。

或者,您可以从 GitHub 下载源代码 ZIP 文件。

2. 获取依赖项

Ghidra 需要几个不在 Maven Central 中的外部依赖项。这些必须使用特殊的 Gradle 任务下载。

此脚本将在仓库根目录的 dependencies 目录中下载所需的依赖项。

来源:README.md66-70 gradle/support/fetchDependencies.gradle DevGuide.md32-36

3. 准备开发环境

下载 Maven Central 依赖项并设置仓库以进行开发

默认情况下,这些依赖项将存储在 $HOME/.gradle/

来源:DevGuide.md38-42

构建Ghidra

基本构建

要为您的当前平台构建 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,以压缩形式。

来源:DevGuide.md44-88

构建任务依赖关系

构建任务之间存在相互依赖关系,如图所示。

来源:build.gradle104-113 gradle/root/distribution.gradle642-720

构建原生组件

Ghidra 包含原生代码,必须为每个目标平台进行编译。构建过程通过特定平台的任务来处理这个问题。

支持的平台

构建系统支持多个平台,这些平台在 nativePlatforms.gradle 文件中定义。

平台架构操作系统
win_x86_64x86-64Windows
linux_x86_64x86-64Linux
mac_x86_64x86-64macOS
mac_aarch64AArch64macOS
linux_aarch64AArch64Linux
freebsd_x86_64x86-64FreeBSD
freebsd_aarch64AArch64FreeBSD

来源:GPL/nativePlatforms.gradle GPL/nativeBuildProperties.gradle25-35 Ghidra/Features/PDB/buildNatives.gradle Ghidra/Features/PDB/src/pdb/pdb.vcxproj

Windows 特定原生构建

在 Windows 上构建时,系统使用 Visual Studio 来编译原生组件。配置通过 vsconfig.gradle 脚本自动处理,该脚本会检测已安装的 Visual Studio 版本。

对于 PDB 支持,构建系统使用 Visual Studio 来编译 PDB 解析器。

  1. 它使用 vswhere.exe 来检测 Visual Studio 安装。
  2. 它会配置构建环境,使用正确的 Windows SDK 版本。
  3. 它使用 MSBuild 构建 PDB 应用程序。

来源:GPL/vsconfig.gradle Ghidra/Features/PDB/buildNatives.gradle Ghidra/Features/PDB/src/pdb/pdb.vcxproj

构建 Python 组件

Ghidra 通过 PyGhidra 集成 Python,这需要构建 Python 包。

Python 包构建过程

Python 包构建过程包括:

  1. 安装 Python 依赖项
  2. 创建 Python 虚拟环境
  3. 构建用于分发的 Python wheel 文件
  4. 为 Ghidra 的 Java API 创建类型存根

来源: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 包时遇到问题:

  1. 使用 python --version 验证 Python 版本(必须是 3.9-3.13)。
  2. 使用 python -m pip --version 检查 pip 是否已安装。
  3. 如果您的系统 Python 没有 pip 访问权限,请尝试使用虚拟环境。

来源:DevGuide.md404-409 README.md47-50

离线开发

为离线开发做准备

这确保了所有依赖项都已本地可用。

来源:DevGuide.md132-144

在 CI 环境中构建

用于在持续集成环境或 Docker 容器中运行构建。

来源: DevGuide.md163-171

结论

从源代码构建 Ghidra 可以提供灵活性,并能够根据特定需求定制软件。基于 Gradle 的构建系统以跨平台一致的方式处理依赖项、编译和打包。通过遵循本文档中概述的步骤,您应该能够成功地从源代码构建 Ghidra。

有关其他帮助和信息,请参阅仓库中的《开发者指南》(DevGuide.md)。