代码属性图之-joern初探

本文仅作交流学习使用,严谨转载!!!

一 Joern安装

参考上篇博客https://blog.csdn.net/water_likly/article/details/88415127

二 Joern的初步使用

Joern的使用主要涉及到python-joern,neo4j的操作,本文仅作初步的学习。参考链接:Joern

首先,Joern是用来分析C/C++程序的,因此,我们先从网上或者自己编写一个简单的C程序,我直接从github上下载一个自己感兴趣的项目。

1 cd $JOERN //转入你安装的joern目录(这个目录比较重要,下面会用到!

2 插入代码:代码原型:java -jar $JOERN/bin/joern.jar $CodeDirectory

    要是分析大型程序的话,需要指定内存:java -Xmx$SIZEg -jar $JOERN/bin/joern.jar $CodeDirectory

    $JOERN:joern安装目录,$CodeDirectory:待分析的程序目录,$SIZE:给jvm分配内存

   本文的代码为:sudo java -jar /home/****/joern-0.3.1/bin/joern.jar /home/****/testcode/giri-master

   该命令运行完后会在该目录(joern-0.3.1)下生成一个 .joernIndex隐藏文件(ctrl+h可以查看)。注意,如果此目录已经存在,则joern.jar就会在其中添加代码,因此在每次你想要创建一个新的数据库之前需要删除.joernIndex,然后重复此步骤。

3 设置neo4j,该部分为重点,如果你按照我上篇博客来安装的话,应该在/usr下发现neo4j目录,里面应该是neo4j的社区2.1.8版(我记得应该是2.1.5,但是2.1.8是完好的)。在/usr/Neo4j/neo4j-community-2.1.8/conf目录下找到neo4j-server.properties文件,并修改为上面.joernIndex的目录,之后保存退出。

   4 尝试启动neo4j,首先转到neo4j的bin目录:cd /usr/Neo4j/neo4j-community-2.1.8/bin

      之后运行:sudo ./neo4j start

      启动失败,使用sudo ./neo4j start-no-wait

     打开浏览器,localhost:7474

     成功启动 neo4j。

5 验证neo4j能够正常启动后,先将neo4j关闭,运行:sudo ./neo4j stop即可。

6 运行joern:在joern的安装目录下,运行:sudo  ./joern  /home/*****/testcode/giri-master,结果如下:

7 之后转到neo4j的目录打开neo4j:sudo ./neo4j console //控制台下运行neo4j

   8 打开浏览器,输入127.0.0.1:7474或者localhost:7474查看,按下图点击页面:

9 出现的效果:

至此,我们完成了joern对代码的初步分析,joern是借助neo4j来显示代码、文件之间的相关性的。

对上面的一些解释:

IS_PARENT_DIR_OF:为每个目录创建一个节点,并使用IS_PARENT_DIR_OF边连接这些节点,可以公开目录层次结构。

IS_FILE_OF:为每个文件创建一个节点,并使用IS_PARENT_DIR_OF边连接这些节点,结合IS_PARENT_DIR_OF可以公开目录层次结构。

IS_CLASS_OF:属性和方法声明通过IS_CLASS_OF边连接到类节点,可以通过IS_FILE_OF边和文件节点相连接。

IS_AST_PARENT_OF:抽象语法树节点通过IS_AST_PARENT_OF边连接到它们的子节点。

IS_FUNCTION_OF_AST:通过IS_FUNCTION_OF_AST边将对应的函数节点连接到AST根节点。

FLOWS_TO、REACHES:语句节点通过FLOWS_TO以及REACHES边连接到其他语句节点抽象语法树节点的子集,分别表示控制和数据流。

USE、DEF:符号节点通过use -edge连接到使用符号的所有语句节点,并通过def -edge连接到分配给符号的所有语句节点。

其他的信息:DECLERAS,POST_DOM,CONTROLS,IS_FUNCTION_OF_CFG等还没有找到具体的说明。看官们可以自行理解,要是有好的解释,可以留言,我会添加并修改。

property keys是指节点的属性。

三 小结

Joern有很多优点,我会在后面的学习中慢慢掌握,希望在学习joern的同时,也能对neo4j这个图数据库有所了解。本文的内容比较简单,但却是后面分析的基础。好啦,今天到此为止!

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值