Ghidra 的二进制格式支持包括负责加载和分析可执行文件和对象文件格式的系统、类和过程。本页面详细介绍了 Ghidra 如何处理不同的二进制格式,包括 ELF、Mach-O 和 DYLD Cache 文件,并解释了支持逆向工程各种二进制文件的架构和组件。
有关加载这些二进制文件后分析代码的信息,请参阅反编译器系统。有关处理器架构建模的详细信息,请参阅处理器架构支持。
Ghidra 的二进制格式支持遵循分层架构,将原始二进制文件转换为 Ghidra 的内部程序表示。
管道组件协同工作以
来源
可执行和可链接格式(ELF)广泛用于 Linux、Unix 和类 Unix 系统。Ghidra 实现了对解析和分析 ELF 可执行文件、共享对象和对象文件的全面支持。
ELF 加载过程包括
ElfHeader 类解析 ELF 头、程序头和节头。ElfProgramBuilder 根据程序头(段)或节头创建内存块。.symtab、.dynsym)被处理以创建程序符号。.rel、.rela)被处理以修复地址引用。.dynamic)被处理以处理共享库依赖项。| 类 | 目的 |
|---|---|
ElfHeader | 解析 ELF 头并提供对所有 ELF 结构的访问 |
ElfProgramBuilder | 从 ELF 文件创建 Ghidra 程序 |
ElfLoadAdapter | 提供特定于体系结构的加载适配 |
ElfRelocationTable | 处理重定位条目 |
ElfSectionHeader | 表示节头及其属性 |
ElfDefaultGotPltMarkup | 处理 GOT 和 PLT 结构 |
来源
Mach-O(Mach Object)是 Apple 的 macOS 和 iOS 操作系统使用的可执行文件格式。Ghidra 为 Mach-O 可执行文件、动态库和其他 Mach-O 变体提供了广泛的支持。
Mach-O 加载过程包括
MachHeader 类解析 Mach-O 头和加载命令。对于预链接内核(在 macOS/iOS 中使用),Ghidra 使用 MachoPrelinkProgramBuilder,它
| 类 | 目的 |
|---|---|
MachoProgramBuilder | 从 Mach-O 文件创建 Ghidra 程序 |
MachoPrelinkProgramBuilder | 预链接内核的专用构建器 |
LoadCommand | 所有 Mach-O 加载命令的基类 |
SymbolTableCommand | 处理符号表信息 |
DynamicSymbolTableCommand | 处理动态符号表信息 |
DyldChainedFixups | 处理链式指针修复 |
NList | 表示 Mach-O 文件中的符号条目 |
来源
DYLD 缓存文件由 Apple 的动态链接器用于存储共享库的优化版本。这些缓存文件包含多个为更快加载而优化的 Mach-O 库。
DYLD 缓存加载过程包括
DyldCacheHeader 类解析 DYLD 缓存头和相关结构。| 类 | 目的 |
|---|---|
DyldCacheHeader | 解析并表示 DYLD 缓存头 |
DyldCacheProgramBuilder | 从 DYLD 缓存文件创建 Ghidra 程序 |
DyldCacheLocalSymbolsInfo | 处理 DYLD 缓存文件中的本地符号 |
SplitDyldCache | 处理拆分的 DYLD 缓存文件(跨越多个文件) |
DyldCacheLoader | 识别和加载 DYLD 缓存文件的加载器 |
DyldCacheSlideInfoCommon | 处理用于指针修复的滑块信息 |
来源
Ghidra 提供了扩展二进制格式支持以支持特定体系结构和格式的机制。
ElfLoadAdapter 类可以扩展以提供特定于体系结构的处理
特定于体系结构的重定位处理程序根据目标体系结构处理重定位
ElfRelocationHandler 是 ELF 重定位处理的基类每个加载器都提供配置选项来控制加载过程
ElfLoaderOptionsFactory 提供 ELF 加载选项DyldCacheOptions 控制 DYLD 缓存处理选项来源
二进制格式支持与其他几个 Ghidra 系统集成
处理器架构支持(#3)
反编译器系统(#2)
数据类型系统
二进制格式支持系统构成了 Ghidra 分析能力的基础,它将原始二进制文件转换为结构化的程序,这些程序可以使用 Ghidra 强大的反编译和分析工具进行分析。