用joern画AST、CFG、CDG、DDG、PDG、CPG
之前写了一点joern的博客,发现很多人在问我怎么画图。确实,用joern这个工具的话,画代码属性图是这个工具的亮点了。
这篇文章怎么说呢,也可以看作是对官方文档的翻译和实现吧。
能搜到这篇文章,想必应该是搜到上面的一个图的名字进来的。就不详细介绍每个图了,就简单介绍下缩写的含义。
- AST:abstract syntax tree
- CFG:control flow graph
- CDG:Control Dependence Graphs
- DDG:Data Dependence Graphs
- PDG:Program Dependence graphs
- CPG:Code Property Graphs
命令行操作
首先解析源码目录(下面代码的/src/directory)的代码,然后用export命令将图导出到outdir文件夹下,默认的cpg的名字是当前目录下的cpg.bin。
- –repr:指定画什么图ast|cfg|ddg|cdg|pdg|cpg14
- –out:指定输出图dot文件目录名字(自动创建)
#生成cpg.bin
joern-parse /src/directory
#基于cpg.bin文件生成别的图
joern-export [cpg-name] --repr pdg --out outdir
此外需要注意outdir文件夹不需要你自己建,如果你自己建的话,可能会报下面的错误:
Output directory outdir already exists. Bailing out
成功运行后,会发现你的outdir文件夹都是图的dot文件了。
输入命令:
dot -Tpng -o test.png [dot-file-name]
同理也可以画出别的图。
joern终端操作
首先,导入一段测试代码
joern> importCode.c.fromString( """int myfunc(int b) {int a = 42;if (b > 10) {foo(a)}bar(a);}""")
画各种图的命令:
cpg.method("myfunc").plotDotAst
cpg.method("myfunc").plotDotCfg
cpg.method("myfunc").plotDotCdg
cpg.method("myfunc").plotDotDdg
cpg.method("myfunc").plotDotPdg
cpg.method("myfunc").plotDotCpg14
AST
CFG
CPG
暂时不知道终端怎么画这CDG、PDG、DDG。
用joern画AST、CFG、CDG、DDG、PDG、CPG相关推荐
- 使用Joern处理大量文件,生成PDG速度很慢的解决方法
这个问题我也是无语了.在之前的博客中,我介绍了怎么通过Joern生成PDG,特别是以代码行为单位的PDG:怎样使用Joern生成Program Dependence Graph并和源码中的行号对应起来 ...
- Code Representation方面的Empirical Studies
Empirical Studies 一.Learning Program Semantics with Code Representations: An Empirical Study 1.1.简介 ...
- c++代码健壮性_复活Navex-使用图查询进行代码分析(上)
从了解到修复 Navex, 其中花了一年多, 从对自动化代码审计一无所知到学习PL/Static Analysis, 翻阅十几年前的文档, 补全Gremlin Step, 理解AST, CFG, DD ...
- angr原理与实践(二)—— 各类图的生成(CFG CG ACFG DDG等)
本文系原创,转载请说明出处 Please Subscribe Wechat Official Account:信安科研人,获取更多的原创安全资讯 上一篇文章介绍了angr的原理,自此篇文章开始,将从一 ...
- 程序切片知识点整理(程序依赖图、静态切片、动态切片)
整理了很久很久的一篇文章,觉得有收获的可以点个赞点个关注哇!!!有问题也可以评论或找我交流,有评论必回复! 目录 一.基础知识概念: 关于控制流信息有如下几个基本概念 1.基本块: 2.控制流图(cf ...
- code representation-CPG
Modeling and Discovering Vulnerabilities with Code Property Graphs 一.背景 二.Representations Of Code 2. ...
- 【程序分析】程序切片技术
基本概念 参考:https://zhuanlan.zhihu.com/p/379422670 Program slicing技术:用于提取与某变量强相关的代码部分. 例如,原始程序代码为: 它所要完成 ...
- 详解APK静态分析引擎`quark-engine`的5大功能
1. 引入 2020年8月,在DEFCON 28大会上(参考3),发布了一个开源的"Android malware analysis engine",名字叫quark-engine ...
- [论文阅读] (23)恶意代码作者溯源(去匿名化)经典论文阅读:二进制和源代码对比
<娜璋带你读论文>系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢.由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学 ...
最新文章
- c语言装饰,C++设计模式之装饰模式(Decorator)
- MAXIMO启动中心设置
- wangEditor Java富文本的图片上传
- python 自动输入_Python自动输入【新手必学】
- 阅读react-redux源码(六) - selectorFactory处理store更新
- 用小程序·云开发打造功能全面的博客小程序丨实战
- vue require图片_手把手教你使用require.context实现前端自动化
- impala的substr从第几位截到最后一位_天赋不输乔丹,麦迪选秀为何只排第9?看前面几位,第1让老詹吃瘪...
- Spark Streaming 源码详解
- 湖南大学离散数学实验——代码(一)
- 如何根据经纬度查询地理位置
- Code Review之前中后
- win10 1607 密匙
- 老张和小梁的求职之旅
- BigWorld Server - Architecture
- VS Code 所选驱动器或UNC共享不存在或不可访问。请另外选择
- 同时使用 IE7 和 IE6 的方法
- 计算机机房防火门,弱电机房门为防火门吗
- Q系列三菱PLC ,QD77MS16走总线控制伺服项目,实际应用的
- java姓名模糊查询_java 模糊查询。(转)
热门文章
- 习题整理——二叉树NOI1758、UVA679、UVA122
- oracle 00600 kccpb,【案例】Oracle报错ORA-00600 kccpb_sanity_check_2 恢复控制文件过程
- 解决Beyond Compare中文乱码问题
- CF 732F Tourist Reform——v-SCC+dfs
- VectorMapNet | 端到端的矢量化高精地图学习
- 联想拯救者屏幕亮度无法调节,监视器和显卡驱动问题,经过多种测试
- 递归序列化错误:Recursive Serialization is not supported. You can‘t dereference a PPtr while loading.
- iObit Driver Booster 8 驱动更新失败 只停留在 1%
- pika详解(五)登录认证及connectionParameters
- AR.js 学习笔记