图形化显示 Python 函数之间的调用关系
0X01 安装方法
1.下载并安装graphviz
下载地址: https://graphviz.gitlab.io/_pages/Download/windows/graphviz-2.38.msi
注意:安装路径可任意选择
2.配置环境变量
比如我的安装路径是
E:\Graphviz2.38
那么就在系统环境变量 path 中添加下面的项
E:\Graphviz2.38\bin
3.安装 pycallgraph
pip install pycallgraph
0X02 使用方法
1.在项目主函数所在文件中引入依赖包
比如如果我分析的是 sqlmap ,那么我们可以在 sqlmap.py 中添加下面的依赖
from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput
from pycallgraph import Config
from pycallgraph import GlobbingFilter
如下图所示:
注意:
这里有一个点就是有些项目可能会规定某些 import
必须在第一行,那么如果这时候你把这个引用放在最上面可能项目不能正常运行,这要根据不同的项目而定
2.设定要显示或者不要显示的函数
我们在 if __name__ == "__main__":
下,main() 之上可设置我们想要在图中显示的函数和想要隐藏的函数(这个设置不是必须的,在我的使用中就没有特殊的需要,我便没有设置)
def main():
# 你的主函数代码。
if __name__ == "__main__":
# 下面是添加部分
config = Config()
# 关系图中包括(include)哪些函数名。
#如果是某一类的函数,例如类gobang,则可以直接写'gobang.*',表示以gobang.开头的所有函数。(利用正则表达式)。
config.trace_filter = GlobbingFilter(include=[
'main',
'draw_chessboard',
'draw_chessman',
'draw_chessboard_with_chessman',
'choose_save',
'choose_turn',
'choose_mode',
'choose_button',
'save_chess',
'load_chess',
'play_chess',
'pop_window',
'tip',
'get_score',
'max_score',
'win',
'key_control'
])
# 该段作用是关系图中不包括(exclude)哪些函数。(正则表达式规则)
# config.trace_filter = GlobbingFilter(exclude=[
# 'pycallgraph.*',
# '*.secret_function',
# 'FileFinder.*',
# 'ModuleLockManager.*',
# 'SourceFilLoader.*'
# ])
...
3.main()前调用我们的绘图函数
...
graphviz = GraphvizOutput()
graphviz.output_file = 'graph.png'
with PyCallGraph(output=graphviz, config=config):
main()
如图所示:
注意:
因为我这里没有特别的配置于是 PyCallGraph() 函数里没有上面代码中的 config 选项
0X03 运行结果
1.运行我的 sqlmap.py
2.在当前目录下生成指定图片
3.图片效果
0X04 总结
现在可以愉快地开始我们的分析之旅了!
0X05 参考
https://blog.csdn.net/qq_36408085/article/details/82952846
https://blog.csdn.net/Marksinoberg/article/details/52809192
转载自:https://www.k0rz3n.com/2019/02/22/%E5%9B%BE%E5%BD%A2%E5%8C%96%E6%98%BE%E7%A4%BA%20Python%20%E5%87%BD%E6%95%B0%E4%B9%8B%E9%97%B4%E7%9A%84%E8%B0%83%E7%94%A8%E5%85%B3%E7%B3%BB/
分类:
Python基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2019-09-23 CSS基础(二十二)--OverFlow隐藏
2019-09-23 (三)WebDriver API之定位元素-Class定位
2019-09-23 CSS基础(二十一)--Position之调整层级位置
2018-09-23 Python学习笔记文件操作