Java和Android应用points-to analysis工具Doop的基本使用方法
今天简单总结一下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 theDOOP_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的基本使用方法相关推荐
- Points-to analysis工具Doop的基本使用(2)
在上一篇博客中:Java和Android应用points-to analysis工具Doop的基本使用方法_qysh123的专栏-CSDN博客 我简单介绍了Souffle和Doop的安装和使用方法,下 ...
- Points-to analysis工具Doop的命令行参数
接前两篇博客,这里总结一下Doop的命令行参数,另外记录一下我没搞清楚的一些东西. 在终端里运行: ./doop --help all 可以看到其给出一些参数选项: == Configuration ...
- [022] Android、iPhone和Java三个平台一致的加密工具
先前一直在做安卓,最近要开发iPhone客户端,这其中遇到的最让人纠结的要属Java.Android和iPhone三个平台加解密不一致的问题.因为手机端后台通常是用JAVA开发的Web Service ...
- Android Bluedroid source code analysis
Android Bluedroid source code analysis 图1:应用层到协议层 Android的bt整体结构如图1所示: 应用层:使用蓝牙协议的各种应用,例如:蓝牙电话.音乐等. ...
- 开发者福利:史上最全Android 开发和安全系列工具
取证工具 bandicoot - 一个Python工具箱,用于分析手机元数据.它提供了一个完整,易于使用的环境,数据科学家分析手机元数据.只需几行代码,加载数据集,可视化数据,执行分析和导出结果. A ...
- Android开发和安全系列工具
[取证工具] * [bandicoot] (https://github.com/yvesalexandre/bandicoot) - 一个Python工具箱,用于分析手机元数据.它提供了一个完整,易 ...
- 【转】史上最全Android 开发和安全系列工具
取证工具 bandicoot - 一个Python工具箱,用于分析手机元数据.它提供了一个完整,易于使用的环境,数据科学家分析手机元数据.只需几行代码,加载数据集,可视化数据,执行分析和导出结果. A ...
- 最全Android 开发和安全系列工具
[阿里聚安全出品]史上最全Android 开发和安全系列工具 作者 菜刀文 关注 2017.02.20 00:08 字数 4554 阅读 725评论 1喜欢 29 作者:阿里聚安全 地址:https: ...
- Android内存泄露抓取工具leakcanary
引言 "A small leak will sink a great ship." - Benjamin Franklin 概述 某些对象的生命周期有限,当它们的工作完成以后,将会 ...
最新文章
- HTTP Slow Attack测试工具SlowHTTPTest
- json_decode的结果是null
- 资源推荐 | TensorFlow电子书《FIRST CONTACT WITH TENSORFLOW》
- nginx小总结(五)
- SAP Spartacus Org Unit明细页面的工具栏按钮设计
- 32查运行内存的map文件_linux内存管理
- 格式化linux grub,linux grub 引导启动过程详解
- CentOS7设置静态ip地址的两种方式
- 多数人只有一种工资收入,想赚更多钱,只有去做副业
- CSE-CIC-IDS 2018数据集下载
- 实对称矩阵的特征值求法_正交矩阵学习小结
- tolua unity 报错_Unity Editor + tolua 在 Linux 下的 runtime 问题
- Reason: Canonical names should be kebab-case (‘-‘ separated), lowercase alpha-numeric characters and
- Oracle sql 按指定顺序产生序列号
- 用Python做雷霆战机小游戏【附素材+源码】
- 英语语法篇 - 各类词性和句子成分的作用
- LINUX软中断-softirq
- 使用绝对定位来实现拉手网上的效果
- 解决电脑连上wifi无法上网问题
- 不收版面有稿费的100家杂志期刊
热门文章
- 男女通用,关于爱情的70句哲理
- 编写一个程序,定义抽象基类Shape,由它派生出5个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形)。用虚函数分
- Java高频面试题(四)
- Windows10家庭版添加组策略编辑器
- (蒼ざめた月の光)苍青色的月光(moonlight)Ture End--真正结局(大团圆结局)攻略心得...
- python写交易系统_鳄鱼线交易系统Python版
- 2021年电工(高级)考试题及电工(高级)新版试题
- 零基础学习编程开发Tinder自动化程序引流需要学那些?
- 激动的10秒钟==艰辛的1095天
- 超详解pytorch实战Kaggle比赛:房价预测