今天简单总结一下Doop这个工具的使用方法,其网址在这里:Bitbucket

感觉这个页面其实已经说得很详细了。首先,需要安装Soufflé这个工具(这是一个高效的Datalog引擎),我发现最靠谱的方法还是自己build以后安装:

首先下载其源码:

git clone git://github.com/souffle-lang/souffle.git

然后按照这个链接:Build Soufflé | Soufflé • A Datalog Synthesis Tool for Static Analysis

进行build和安装,安装的时候可以指定到其他的目录,例如我这里运行:

cd souffle
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/home/yu/souffle-inst
cmake --build build --target install

然后将安装路径加入到环境变量中:

gedit ~/.bashrc

然后加入这一行:

export PATH=$PATH:/home/yu/souffle-inst/bin

重启终端之后就可以在任意目录下运行souffle了。

接下来就是Doop的安装和使用,按照这个页面的介绍:Bitbucket

我们可以直接通过运行类似:

./doop -a context-insensitive -i com.example.some.jar

的命令来运行Doop。我尝试了一下doop/tests/016-reflection这里的例子,首先在这个目录下运行:

gradle build

可以在这个目录下:doop/tests/016-reflection/build/libs看到一个jar包:016-reflection.jar,如果我们把这个jar包直接拷贝到Doop根目录下,然后运行:

./doop -a context-insensitive -i 016-reflection.jar

则会报和JRE版本有关的错误,具体我也没有仔细看,看了看上面Doop的页面:

For a variety of benchmarks, you could clone (or download) the doop-benchmarks repository.

One important directory in that repository is JREs. It can be used for the DOOP_PLATFORMS_LIB environment variable. It contains certain java library files for different JRE versions, necessary for analysis purposes.

感觉还是应该指定一下这个环境变量(目的是可以在分析过程中使用一个老的JRE版本),clone一下上面这个repo,然后在上面修改过的.bashrc文件中加入:

export DOOP_PLATFORMS_LIB=/home/yu/doop-benchmarks

再重新打开一个终端,然后再运行:

./doop -a context-insensitive -i 016-reflection.jar

发现可以正常运行了。运行完之后在类似于:doop/last-analysis的目录下,可以看到生成了很多结果文件,其中VarPointsTo.csv这个文件很大。我还没有具体仔细看这些文件的内涵。

下面总结一下和Doop官网中说的不一样的地方:我比较感兴趣Doop和Souffle这两者是怎么交互的,按照官网的介绍:

Soufflé profile

You can then inspect the analysis results by using souffle-profile and providing the profile.txt file produced by Souffle under the output directory of the analysis database. In order to inspect the profile.txt of the above doop invocation with --souffle you would use the following command:

$ souffle-profile out/antlr-ci/profile.txt

感觉好像是在Doop根目录下运行这个命令即可,但是当我这样运行,就会报错:

souffle-profile:未找到命令

其实可以理解,我们并没有看到有一个可执行文件叫这个名字啊。我又看了看souffle的bin目录,发现其实有这样一个可执行文件:souffleprof,所以感觉是不是改名了。另外,上面这个例子给出的目录:out/antlr-ci/profile.txt也是不存在的。我看了一下doop/out这个目录,里面是一个或者若干个md5 hash value命名的文件夹,觉得好奇怪啊。点开其中一个文件夹,可以看到里面有一个叫meta的文件,是不是记录了这次运行的一些基本的信息呢:

SOUFFLE_DEBUG=false
SOUFFLE_FORCE_RECOMPILE=false
SOUFFLE_INCREMENTAL_OUTPUT=false
SOUFFLE_JOBS=4
SOUFFLE_LIVE_PROFILE=false
SOUFFLE_MODE=compiled
SOUFFLE_PROFILE=false
SOUFFLE_PROVENANCE=false
SOUFFLE_USE_FUNCTORS=false

所以我想,是不是我们把SOUFFLE_PROFILE在命令行中指定一下就可以了?所以尝试运行:

./doop -a context-insensitive --souffle-profile -i 016-reflection.jar

没想到这样运行的话会报一堆错,不知道怎么回事!另外吐槽一点,上面souffle-profile out/antlr-ci/profile.txt中给出的profile.txt我也不知道是什么意思,因为整个Doop文件夹下都没有叫这个名字的文件。

不过今天算是能够正常运行Doop了,所以这里还是简单记录一下。(尝试了一个小时左右,呵呵,应该说Doop的文档写得不错了,但是还是有错误和语焉不详的地方,例如上面的Soufflé profile,实在不知所云,不得不说,大家做事都太粗心了)

Java和Android应用points-to analysis工具Doop的基本使用方法相关推荐

  1. Points-to analysis工具Doop的基本使用(2)

    在上一篇博客中:Java和Android应用points-to analysis工具Doop的基本使用方法_qysh123的专栏-CSDN博客 我简单介绍了Souffle和Doop的安装和使用方法,下 ...

  2. Points-to analysis工具Doop的命令行参数

    接前两篇博客,这里总结一下Doop的命令行参数,另外记录一下我没搞清楚的一些东西. 在终端里运行: ./doop --help all 可以看到其给出一些参数选项: == Configuration ...

  3. [022] Android、iPhone和Java三个平台一致的加密工具

    先前一直在做安卓,最近要开发iPhone客户端,这其中遇到的最让人纠结的要属Java.Android和iPhone三个平台加解密不一致的问题.因为手机端后台通常是用JAVA开发的Web Service ...

  4. Android Bluedroid source code analysis

    Android Bluedroid source code analysis 图1:应用层到协议层 Android的bt整体结构如图1所示: 应用层:使用蓝牙协议的各种应用,例如:蓝牙电话.音乐等. ...

  5. 开发者福利:史上最全Android 开发和安全系列工具

    取证工具 bandicoot - 一个Python工具箱,用于分析手机元数据.它提供了一个完整,易于使用的环境,数据科学家分析手机元数据.只需几行代码,加载数据集,可视化数据,执行分析和导出结果. A ...

  6. Android开发和安全系列工具

    [取证工具] * [bandicoot] (https://github.com/yvesalexandre/bandicoot) - 一个Python工具箱,用于分析手机元数据.它提供了一个完整,易 ...

  7. 【转】史上最全Android 开发和安全系列工具

    取证工具 bandicoot - 一个Python工具箱,用于分析手机元数据.它提供了一个完整,易于使用的环境,数据科学家分析手机元数据.只需几行代码,加载数据集,可视化数据,执行分析和导出结果. A ...

  8. 最全Android 开发和安全系列工具

    [阿里聚安全出品]史上最全Android 开发和安全系列工具 作者 菜刀文 关注 2017.02.20 00:08 字数 4554 阅读 725评论 1喜欢 29 作者:阿里聚安全 地址:https: ...

  9. Android内存泄露抓取工具leakcanary

    引言 "A small leak will sink a great ship." - Benjamin Franklin 概述 某些对象的生命周期有限,当它们的工作完成以后,将会 ...

最新文章

  1. HTTP Slow Attack测试工具SlowHTTPTest
  2. json_decode的结果是null
  3. 资源推荐 | TensorFlow电子书《FIRST CONTACT WITH TENSORFLOW》
  4. nginx小总结(五)
  5. SAP Spartacus Org Unit明细页面的工具栏按钮设计
  6. 32查运行内存的map文件_linux内存管理
  7. 格式化linux grub,linux grub 引导启动过程详解
  8. CentOS7设置静态ip地址的两种方式
  9. 多数人只有一种工资收入,想赚更多钱,只有去做副业
  10. CSE-CIC-IDS 2018数据集下载
  11. 实对称矩阵的特征值求法_正交矩阵学习小结
  12. tolua unity 报错_Unity Editor + tolua 在 Linux 下的 runtime 问题
  13. Reason: Canonical names should be kebab-case (‘-‘ separated), lowercase alpha-numeric characters and
  14. Oracle sql 按指定顺序产生序列号
  15. 用Python做雷霆战机小游戏【附素材+源码】
  16. 英语语法篇 - 各类词性和句子成分的作用
  17. LINUX软中断-softirq
  18. 使用绝对定位来实现拉手网上的效果
  19. 解决电脑连上wifi无法上网问题
  20. 不收版面有稿费的100家杂志期刊

热门文章

  1. 男女通用,关于爱情的70句哲理
  2. 编写一个程序,定义抽象基类Shape,由它派生出5个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形)。用虚函数分
  3. Java高频面试题(四)
  4. Windows10家庭版添加组策略编辑器
  5. (蒼ざめた月の光)苍青色的月光(moonlight)Ture End--真正结局(大团圆结局)攻略心得...
  6. python写交易系统_鳄鱼线交易系统Python版
  7. 2021年电工(高级)考试题及电工(高级)新版试题
  8. 零基础学习编程开发Tinder自动化程序引流需要学那些?
  9. 激动的10秒钟==艰辛的1095天
  10. 超详解pytorch实战Kaggle比赛:房价预测