zoukankan      html  css  js  c++  java
  • 图形化显示 Python 函数之间的调用关系

    0X01 安装方法

    1.下载并安装graphviz

    下载地址: https://graphviz.gitlab.io/_pages/Download/windows/graphviz-2.38.msi

    注意:安装路径可任意选择

    2.配置环境变量

    比如我的安装路径是

    E:Graphviz2.38

    那么就在系统环境变量 path 中添加下面的项

    E:Graphviz2.38in

    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://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/

  • 相关阅读:
    Appium学习笔记(一)--安装与配置
    google软件测试之道--读后笔记
    Web测试中常见分享问题
    730工作总结
    Java源码分析系列
    LeetCode 21 -- Merge Two Sorted Lists
    LeetCode 20 -- Valid Parentheses
    LeetCode 15 -- 3Sum
    LeetCode 11 -- Container With Most Water
    ASP.NET Core MVC中Hangfire及EF Core的简单使用
  • 原文地址:https://www.cnblogs.com/lirongyang/p/15325484.html
Copyright © 2011-2022 走看看