之前写了一点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相关推荐

  1. 使用Joern处理大量文件,生成PDG速度很慢的解决方法

    这个问题我也是无语了.在之前的博客中,我介绍了怎么通过Joern生成PDG,特别是以代码行为单位的PDG:怎样使用Joern生成Program Dependence Graph并和源码中的行号对应起来 ...

  2. Code Representation方面的Empirical Studies

    Empirical Studies 一.Learning Program Semantics with Code Representations: An Empirical Study 1.1.简介 ...

  3. c++代码健壮性_复活Navex-使用图查询进行代码分析(上)

    从了解到修复 Navex, 其中花了一年多, 从对自动化代码审计一无所知到学习PL/Static Analysis, 翻阅十几年前的文档, 补全Gremlin Step, 理解AST, CFG, DD ...

  4. angr原理与实践(二)—— 各类图的生成(CFG CG ACFG DDG等)

    本文系原创,转载请说明出处 Please Subscribe Wechat Official Account:信安科研人,获取更多的原创安全资讯 上一篇文章介绍了angr的原理,自此篇文章开始,将从一 ...

  5. 程序切片知识点整理(程序依赖图、静态切片、动态切片)

    整理了很久很久的一篇文章,觉得有收获的可以点个赞点个关注哇!!!有问题也可以评论或找我交流,有评论必回复! 目录 一.基础知识概念: 关于控制流信息有如下几个基本概念 1.基本块: 2.控制流图(cf ...

  6. code representation-CPG

    Modeling and Discovering Vulnerabilities with Code Property Graphs 一.背景 二.Representations Of Code 2. ...

  7. 【程序分析】程序切片技术

    基本概念 参考:https://zhuanlan.zhihu.com/p/379422670 Program slicing技术:用于提取与某变量强相关的代码部分. 例如,原始程序代码为: 它所要完成 ...

  8. 详解APK静态分析引擎`quark-engine`的5大功能

    1. 引入 2020年8月,在DEFCON 28大会上(参考3),发布了一个开源的"Android malware analysis engine",名字叫quark-engine ...

  9. [论文阅读] (23)恶意代码作者溯源(去匿名化)经典论文阅读:二进制和源代码对比

    <娜璋带你读论文>系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢.由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学 ...

最新文章

  1. c语言装饰,C++设计模式之装饰模式(Decorator)
  2. MAXIMO启动中心设置
  3. wangEditor Java富文本的图片上传
  4. python 自动输入_Python自动输入【新手必学】
  5. 阅读react-redux源码(六) - selectorFactory处理store更新
  6. 用小程序·云开发打造功能全面的博客小程序丨实战
  7. vue require图片_手把手教你使用require.context实现前端自动化
  8. impala的substr从第几位截到最后一位_天赋不输乔丹,麦迪选秀为何只排第9?看前面几位,第1让老詹吃瘪...
  9. Spark Streaming 源码详解
  10. 湖南大学离散数学实验——代码(一)
  11. 如何根据经纬度查询地理位置
  12. Code Review之前中后
  13. win10 1607 密匙
  14. 老张和小梁的求职之旅
  15. BigWorld Server - Architecture
  16. VS Code 所选驱动器或UNC共享不存在或不可访问。请另外选择
  17. 同时使用 IE7 和 IE6 的方法
  18. 计算机机房防火门,弱电机房门为防火门吗
  19. Q系列三菱PLC ,QD77MS16走总线控制伺服项目,实际应用的
  20. java姓名模糊查询_java 模糊查询。(转)

热门文章

  1. 习题整理——二叉树NOI1758、UVA679、UVA122
  2. oracle 00600 kccpb,【案例】Oracle报错ORA-00600 kccpb_sanity_check_2 恢复控制文件过程
  3. 解决Beyond Compare中文乱码问题
  4. CF 732F Tourist Reform——v-SCC+dfs
  5. VectorMapNet | 端到端的矢量化高精地图学习
  6. 联想拯救者屏幕亮度无法调节,监视器和显卡驱动问题,经过多种测试
  7. 递归序列化错误:Recursive Serialization is not supported. You can‘t dereference a PPtr while loading.
  8. iObit Driver Booster 8 驱动更新失败 只停留在 1%
  9. pika详解(五)登录认证及connectionParameters
  10. AR.js 学习笔记