分析器(Analyses) ======== angr 的目标是使在二进制程序上进行有用的分析变得容易。 为此,angr 允许您以通用格式打包分析代码,可以轻松应用于任何项目。我们将介绍如何编写自己的分析 :ref:`学会写分析器` ,但是想法是所有分析都出现在 ``project.analyses`` 下(例如, ``project.analyses.CFGFast()`` ),可以 作为函数调用,返回分析结果实例。 内置分析 ----------------- .. list-table:: :header-rows: 1 * - 名称 - 描述 * - CFGFast - 构建程序的快速 *控制流图* * - CFGEmulated - 构建程序的准确 *控制流图* * - VFG - 对程序的每个函数执行 VSA,创建 *值流图* 并检测堆栈变量 * - DDG - 计算 *数据依赖图* ,允许确定给定值依赖于哪些语句 * - BackwardSlice - 根据特定目标计算程序的 *反向切片* * - Identifier - 在 CGC 二进制文件中识别常见的库函数 * - 更多! - angr 有很多分析,其中大部分都有效!如果您想知道如何使用其中一个,请提交一个问题请求文档。 弹性 ---------- 分析可以编写成具有弹性,可以捕获和记录任何错误。 这些错误,根据如何捕获,被记录到分析的 ``errors`` 或 ``named_errors`` 属性中。但是,您可能希望以“快速失败”模式运行分析,以便不处理错误。为此,可以将参数 ``fail_fast=True`` 传递给分析构造函数。