Skip to main content
QUICK REVIEW

[论文解读] GTIRB: Intermediate Representation for Binaries

Eric Schulte, Jonathan Dorn|arXiv (Cornell University)|Jul 2, 2019
Parallel Computing and Optimization Techniques参考文献 11被引用 6
一句话总结

GTIRB 是一种与语言无关的开源中间表示(IR),用于二进制分析与重写。它通过将原始机器码字节与基于代码块、控制流图及辅助数据的最小化、可扩展模型相结合,将二进制结构与语义解耦。该 IR 通过抽象指令语义并支持多种编程语言的 Protobuf 序列化,实现了工具间的互操作性,从而推动了模块化、可重用的二进制分析工具链的发展,类似于 LLVM 对编译器研究的影响。

ABSTRACT

GTIRB is an intermediate representation for binary analysis and rewriting tools including disassemblers, lifters, analyzers, rewriters, and pretty-printers. GTIRB is designed to enable communication between tools in a format that provides the basic information necessary for analysis and rewriting while making no further assumptions about domain (e.g., malware vs. cleanware, or PE vs. ELF) or semantic interpretation (functional vs. operational semantics). This design supports the goals of (1) encouraging tool modularization and re-use allowing researchers and developers to focus on a single aspect of binary analysis and rewriting without committing to any single tool chain and (2) facilitating communication and comparison between tools.

研究动机与目标

  • 为解决二进制分析工具之间缺乏互操作性的问题,设计一种与指令语义和二进制格式无关的通用中间表示(IR)。
  • 通过解耦分析、提升(lifting)和重写(rewriting)组件,实现模块化工具开发,使研究人员能够专注于单一方面而无需依赖 monolithic(单体式)框架。
  • 通过保留原始字节并支持对跨外部函数和代码段的控制流表示,实现重汇编(reassembly)与重写。
  • 通过使用 Protobuf 提供标准化、可扩展且序列化的格式,促进工具间的比较与集成。
  • 通过提供高质量、开源的反汇编器(Ddisasm)和完善的 IR 设计文档,降低二进制分析研究的入门门槛。

提出的方法

  • GTIRB 使用以 ByteIntervals、CodeBlocks 和 DataBlocks 为核心的最小化结构模型来表示二进制文件,其中 CodeBlocks 定义了被解释为可执行代码的字节范围。
  • 控制流通过使用标记边的跨过程控制流图(ICFG)进行建模,这些边编码了条件/无条件、直接/间接以及控制流类型(如调用、返回、系统调用)等信息。
  • 原始机器码字节直接存储在 IR 中,不进行语义解释,从而允许外部反汇编器和重汇编器独立且准确地处理它们。
  • ProxyBlocks 用于表示跨越 IR 边界的外部函数或调用,使得在无需完整代码覆盖的情况下也能表示跨 IR 的控制流。
  • 使用对齐指令代替显式的填充字节或 NOP 指令,以减少表示冗余和复杂性,在不引入语义假设的前提下保留代码结构。
  • AuxData 表用于存储额外元数据,如函数名、入口点和分析结果,支持增量式和可扩展的分析,而无需修改核心 IR。

实验结果

研究问题

  • RQ1如何设计一种通用中间表示,以在不强制规定特定指令语义的前提下,实现多种二进制分析与重写工具之间的互操作性?
  • RQ2哪些结构抽象足以以可扩展且可移植的方式表示二进制程序,同时支持静态分析与代码重写?
  • RQ3如何在 IR 中保留并暴露原始机器码,以允许外部反汇编器和重汇编器独立且准确地操作?
  • RQ4最小化、与语言无关的 IR 设计在多大程度上能够支持复杂的二进制分析工作流,包括跨过程分析与重汇编?
  • RQ5一种标准化、开源的 IR 搭配高质量前端反汇编器(Ddisasm),是否能够催化出一个模块化、可重用的二进制分析工具生态系统,类似于 LLVM 对编译器研究的影响?

主要发现

  • GTIRB 通过抽象指令语义并提供基于代码块和控制流图的最小化、可扩展核心结构,成功实现了二进制分析工具之间的通信。
  • 使用原始机器码字节而非语义指令表示,提升了灵活性并避免了语义承诺,支持多种反汇编器和重汇编器。
  • GTIRB 基于 Protobuf 的序列化机制,实现了高效、与语言无关的工具间互操作,支持不同编程语言编写的工具以及与多种分析框架的集成。
  • ProxyBlocks 和对齐指令的引入,使得跨过程控制流与二进制布局能够被准确建模,同时避免引入不必要的复杂性或冗余。
  • Ddisasm 作为 GTIRB 的高质量反汇编器前端,其反汇编速度和准确性均优于 Anger 的 Ramblr,验证了 IR 设计的实际可行性。
  • GTIRB 和 Ddisasm 的开源发布,有潜力催生一个模块化、可重用的二进制分析工具生态系统,其发展路径与 LLVM 在编译器研究中的成功相似。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。