跳转到内容

ROSE 编译器框架/ROSE API

来自维基教科书,开放世界中的开放书籍

此页面的目标是收集有关重构 ROSE API 的讨论

原始版本是直接从 ROSE 开发人员指南的 1.22 ROSE API 重构中复制和粘贴的

这是 API 的概述,将 API 函数添加到下一节。这是一个新的高级 ROSE API 的草案设计,其中将位于调用分析、转换和预期用户级 ROSE 工具支持的机制的高级函数接口。这种支持目前在 ROSE 中四处分布,这个 API 将对其进行集中,并使 ROSE 对用户更加清晰。有四个级别

ROSE 前端

[编辑 | 编辑源代码]

从源代码或二进制可执行文件生成抽象语法树 (AST)。AST 存储输入软件的结构表示。

ROSE 中端

[编辑 | 编辑源代码]

基于 ROSE 的工具的分析和转换支持。

ROSE 分析 API

[编辑 | 编辑源代码]

这将包括过程内分析、过程间分析和全程序分析(克服了单独编译的问题)。此分析可以处理源代码分析、二进制分析或两者。源代码上的程序分析包括

源代码上的程序分析包括

  • 调用图分析
  • 类层次结构分析
  • 控制流分析
  • 定义-使用分析
  • 支配分析
  • 支配树和支配边界分析(旧的)
  • 开放分析的连接(旧的)
  • 指针分析
  • 过程切片(旧的;未使用)
  • 副作用分析
  • 值传播分析
  • 静态过程间切片(替换过程切片)
  • 活跃性分析
  • 依赖性分析
  • AST 解释器(使用 AST 解释具体语义)

二进制文件上的程序分析包括

  • 调用图分析
  • 控制流分析
  • 常量传播
  • 数据流分析
  • 指令语义
  • 库识别(FLIRT)
  • Dwarf 调试格式
  • 二进制文件格式的分析

ROSE 转换 API

[编辑 | 编辑源代码]

AST 的修改可以组织为:i. Instrumentation

ii. 优化这些包括与科学应用程序的一般性能优化相关的优化范围。

  • 内联
  • 循环优化:融合、裂变、展开、块化、循环交换、数组复制等。
  • 常量折叠
  • 有限差分
  • 部分冗余消除

iii. 一般转换这些包括概述,

  • 概述
  • 隐式代码生成:这项工作使 C++ 隐式语义对于 C 风格的分析明确。
  • 函数调用规范化:这是一个函数调用规范化库,用于支持二进制分析。
  • AST 复制支持:此支持允许通过单个函数复制任意子树(或整个 AST),并控制

深层或浅层复制。

  • AST 合并支持:这项工作允许合并单独的 AST,并共享它们的相同名称

语言声明以支持全程序分析。合并的 AST 中的重复部分将被删除。

  • 静态二进制重写二进制可执行文件上可以进行一组受限的转换,本节详细介绍

这项工作。

AST 遍历

[编辑 | 编辑源代码]

ROSE 提供了许多不同的技术来定义 AST 的遍历以及从 AST 形成的关联图的遍历。

ROSE 后端

[编辑 | 编辑源代码]

后端包含用于从 AST 生成代码(反解析)以及可选地调用后端编译器的函数。ROSE 包含许多特定于代码生成阶段的功能

  • 从 AST 的任意子树生成代码

用户可以从 AST 的子集生成代码,作为对自定义代码生成的支持。

  • 使用生成的代码生成任意测试

本节包含在代码生成阶段输出任意文本的支持。例如,它对于生成针对专用 GPU 工具等的代码很有用。

  • 代码生成格式控制

在生成的代码格式方面,可以进行一些控制。

ROSE 工具

[编辑 | 编辑源代码]

基于 ROSE 的工具的有用实用程序函数。

  • AST 可视化

AST 对可视化的支持包括作为 PDF、DOT 和整个图的更彩色表示(包括 AST 以及类型属性(通常不作为 AST 的一部分))的表示。这项工作包括对 dot2gml 翻译的支持(在 roseIndependentSupport/dot2gml 中)。这可能是放置到可能的 OGDF(开放图形绘制框架)的接口的地方。

  • AST 查询

AST 查询机制是一种简单的方法,用于获取 IR 节点的列表。它通常用于分析或转换中。

  • AST 一致性测试

一致性测试验证 AST 是否正确形成。请注意,这不是一个测试,即生成的代码是合法的代码。

  • 性能监控

本节提供支持来衡量基于 ROSE 的工具的空间和时间复杂度。

  • AST 后处理

AST 后处理是在用户修改后用于修复 AST 以输出正确形成的 AST 的步骤。并非所有对 AST 的修改都可以通过此步骤进行更正。

  • AST 文件 I/O 支持

本节包含对将 AST 写入文件和从文件中读取 AST 的支持。使用二进制文件 I/O,它旨在在空间和时间上都具有良好的性能。

  • 语言特定名称支持

本节包含对为语言构造生成唯一名称以及处理混淆和未混淆名称以在基于 ROSE 的工具中使用的支持。

  • 对注释和 CPP 指令的支持

本节包含对在 AST 中读取和写入注释和 CPP 指令的支持。

  • GUI 支持

本节包含对使用 ROSE 构建基于 GUI 的工具的支持。

  • 二进制分析与 IDA PRO 的连接

本节包含对将 IDA Pro 与 ROSE 结合使用以进行二进制分析的支持。

  • 数据库支持

本节包含对构建使用 SQLite 数据库的工具的支持。

  • 图和图分析

本节包含对构建自定义图以表示静态和动态分析以及图分析算法以支持对这些图的分析的支持。

  • 性能指标注释

本节包含对动态派生的信息写入 AST 的支持(性能信息以支持分析和优化工具)。

  • 抽象句柄

本节包含对在源代码中构建抽象句柄的支持。这项工作用于自动调整以及其他将源代码引用作为接口的一部分传递的工具。

  • 宏重包装器

这目前在 ROSE/projects 目录中,也许应该成为 ROSE API 的一部分。

  • 命令行处理支持

这是 ROSE 内部使用的命令行处理,并使其可用,以便用户可以处理特定于其基于 ROSE 的工具的命令行。

  • 通用字符串支持

这些函数支持 ROSE 内部使用的字符串的常见操作,对基于 ROSE 的工具很有用。

  • 常见文件和路径支持

这是一组对处理基于 ROSE 的工具中的目录结构有用的函数。

  • 其他支持

使用信息输出、ROSE 版本号支持等。

华夏公益教科书