我正在尝试获取二进制文件在 CFG 的预序 DFT 遍历中执行的所有库函数调用。我能够得到像这样的 CFG:
import sys, angr
import networkx as nx
proj = angr.Project(sys.argv[1],auto_load_libs=False)
cfg = proj.analyses.CFG().graph
我能够得到 CFG,我什至可以像这样遍历它(假设我得到了正确的主函数节点):
s = nx.dfs_preorder_nodes(cfg,mainFuncNode)
nodes = []
try:
while True:
nodes.append(ns.next())
except:
pass
但是我不知道如何从节点获取函数调用(如果他们真的这样做的话)。我阅读了一些文档,我能想到的是:
for n in nodes:
if n.is_simprocedure:
print n.to_codenode().function
输出全部为 None 并且我确定这是错误的,因为二进制文件正在执行一些 I/O 操作。所以我希望看到类似的东西:
libc_puts
libc_gets
- ...
如果您能给我一些更好的指示,我将不胜感激。