python 可视化AST、CFG学习

1.python生成AST

官方文档:https://docs.python.org/3/library/ast.html
官方使用的是Cpython解释器的ast包
这样生成的AST不是可视化,如果要可视化的AST推荐ctree
参考链接:https://ucb-sejits.github.io/ctree-docs/ipythontips.html

  1. 安装ipython
    Ubuntu默认的python为2,所以如果要使用ipython3需要运行

sudo apt-get install ipython3

其实ipython就是jupyter notebook
2.安装ctree包

pip install ctree

  1. 测试代码
import ctree

def f(a):
    for x in range(10):
        a[x] += x

tree1 = ctree.get_ast(f)
ctree.ipython_show_ast(tree1)

输出就是AST可视化树,如下图所示
请添加图片描述
后来在jupyter notebook中执行这个代码,会一直没有结果。
尝试在ipython中执行,显示有输出是一张图片,但是无法显示。如下图最后一行所示。
请添加图片描述
后来在jupyter notebook中尝试解决:出现问题如下:
请添加图片描述
使用命令行pip install sphinx仍不能解决,因此查看ctree代码。

vim /home/zyn/anaconda3/envs/ast/lib/python3.7/site-packages/ctree/visual/dot_manager.py

把sphinx这一部分代码注释掉:
请添加图片描述
同时修改代码为:

import ctree
def f(a):
    for x in range(10):
        a[x] += x
tree1 = ctree.get_ast(f)
tree1
ctree
a=ctree.ipython_show_ast(tree1)
a

请添加图片描述
成功!

2.python生成CFG

使用github项目:
PythonStaticAnalysis
使用conda创建python=3.7环境

conda create -n pysa python=3.7
-n后面加的是环境的名字
安装依赖包和环境
pip install -r requirements.txt

运行代码

python runAnalysis.py -t ast -s "def gcd(a, b):
    if a<b:
        c: int = a
        a: int = b
        b: int = c

    while b != 0 :
        c: int = a
        a: int = b
        b: int = c % b
    return a"

或者脚本

./runSample.sh

结果在output文件夹里
请添加图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值