1.前言
在用IDA逆向分析程序的时候经常需要查看交叉引用情况,当我们用ctrl+x分析每个函数时,显然是比较费时间的,那么接下来我给大家分享一个可以可视化显示ida中汇编语言中函数调用情况的idapython脚本。
2.代码
[Python] 纯文本查看 复制代码 #-*- coding:utf-8 -*-from sets import Set
import pydot
# 获取段的起始地址
ea = ScreenEA()
callers = dict()
callees = dict()
# 遍历所有的函数
for function_ea in Functions(SegStart(ea), SegEnd(ea)):
f_name = GetFunctionName(function_ea)
# 遍历每个函数的引用函数
for ref_ea in CodeRefsTo(function_ea, 0):
# 引用函数名
caller_name = GetFunctionName(ref_ea)
#将当前函数添加到引用函数调用的函数列表中
callees[caller_name] = callees.get(caller_name, Set())
callees[caller_name].add(f_name)
#创建图像对象
g = pydot.Dot(type='digraph')
#设置默认值
g.set_rankdir('LR')
g.set_size('11,11')
g.add_node(pydot.Node('node', shape='ellipse', color='lightblue', style='filled'))
g.add_node(pydot.Node('edge', color='lightgrey'))
#获取所有函数
functions = Set(callees.keys()+callers.keys())
# 对于每个函数和每个被引用的函数,添加相应的边。
for f in functions:
if callees.has_key(f):
for f2 in callees[f]:
g.add_edge(pydot.Edge(f, f2))
# 将输出写入到Postscript文件
g.write_ps('example6.ps')
3.运行结果
|