angr源码分析——CFGAccurate and Function Manager

本文详细介绍了angr中的CFGAccurate算法和Function Manager。CFGAccurate是angr用于控制流图恢复的重要工具,其通过执行基本块并考虑不同上下文的流向来构造控制流图。Function Manager则是分析过程中产生的对象,用于管理和获取函数信息。文章还阐述了这两个组件的使用、参数、相关方法以及它们在控制流图恢复过程中的作用。
摘要由CSDN通过智能技术生成

angr的控制流图恢复可以分为两种,一种是CFGAccurate,一种是CFGFast。关于它们的介绍,在我以前的一篇《自动化二进制分析技术》中有所提及,为了方便代码的理解,我把这部分内容再次放在本文的后面了。所以,如果你对控制流恢复一窍不通的话,可以跳到最后 控制流图恢复 部分先了解理论。

angr通过执行每一个基本块并观察基本块的执行流向来构造CFG。然而,在不同的上下文中基本块的流向将不同。如果一个块以函数返回作为结束,那么不同的调用者对应的函数返回也将不一样。

首先看一个angr中cfg使用的例子:

import angr
from angrutils import * 

proj=angr.Project('mybinary')
start_addr=0x1F003BD9
start_state= proj.factory.blank_state(addr=start_addr)
cfg = proj.analyses.CFGAccurate(keep_state=True,starts=[start_state.addr], initial_state=start_state)
plot_cfg(cfg, "mycfg",asminst=True, remove_imports=True, remove_path_terminator=True) #convert the cfg to a png

这段代码首先加载了一个二进制文件,创建了一个空状态 start_state作为控制流恢复的起始状态。

最后一条语句是调用了angrutils模块,将恢复的控制流图打印为png,真的超好用的哎!不过似乎只支持打印CFGAccurate算法恢复出的控制流图,CFGFast不能,因为阅读后面文献可知它是没有控制关系的。当然它还可以画控制依赖图和数据流图,等一切NetworkX DiGraph的实例。

CFGAccurate算法比较常用,所以先介绍一下它的API。

classangr.analyses.cfg.cfg_accurate.CFGAccurate(context_sensitivity_level=1start=Noneavoid_runs=Noneenable_function_hints=Falsecall_depth=Nonecall_tracing_filter=Noneinitial_state=Nonestarts=None

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值