日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用joern画AST、CFG、CDG、DDG、PDG、CPG

發布時間:2023/12/8 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。