soot基础 -- 常用参数配置

本文详细介绍了Soot工具的配置使用,包括类加载、配置总述、一般配置、输入配置、输出配置、处理选项及应用模式选项。重点讨论了如何设置类加载、是否加载被排除的类体、允许未处理的类、源码格式、处理路径和主类,以及输出目录和格式。通过示例代码和配置选项,帮助读者理解Soot在分析Java程序时的配置策略。
摘要由CSDN通过智能技术生成

在soot的学习过程中会遇到大量的和配置相关的一些内容,这些内容设置的不正确会很让人感到苦恼,为此做出以下总结。

使用soot进行编程的流程

基本的流程图如下:

  • 类加载】在类加载阶段,可以设置加载哪些类,哪些不进行加载。
  • 类加载】类加载之后,还需要对类贴上一定的标签,分类。(哪些类是应用的类,哪些类是library类等等),进而为phase的处理阶段进行一定的准备。
    -【phase处理类】 phase阶段对于一些类的处理,是可以定制的。(比如说,只解析应用的类,而不考虑library类等)【因为前面对于类进行了标记】

这里写图片描述

参数配置(总述):(包含下面几个大的方面)


* 一般配置
* 输入配置
* 输出配置
* 处理配置
* 应用模式的配置
* 输入特性的配置
* 输出特性的配置
* 注释的配置
* 其他配置

一般配置(General Options)

1.1. -help
展现帮助,以及退出。

1.2. -phase-list
打印可能的阶段。

1.3. -verbose
啰嗦模式,会打印在处理过程中,丰富的提示信息。

1.4. -app
应用模式运行。

1.5. -whole-program
开启全局模式。对于阶段会产生一定的效果,效果如下:
这里写图片描述

1.6. -on-the-fly
复杂分析的办法,能够提升精确度。(但是会消耗较多的时间)

输入配置(Input Options)

(通过观察call graph边的数量来查看相应的效果)
1.1. -no-bodies-for-excluded
不加载被排除的类的类体(body)。
【效果】false —》(93749条边) , true —》 (131)

PS:

* 哪些类被排除了?soot默认会排除哪些类?
* flowdroid会排除哪些类?

1.2. -allow-phantom-refs
允许未被处理(unresolve)的类,可能引发错误。
什么叫做未处理的类?

* 找不到对应的源代码就被称作是虚类(phantom class)。

 设置为true的时候,出现下面一些提示信息:

* 这条语句的 意思是,无法找到 LambdaMetafactory的源代码。(也就是解析无法进入其中)

Warning: java.lang.invoke.LambdaMetafactory is a phantom class!

 设置为false的时候,可能引发异常:

异常信息:

* 之所以会出现异常是因为,大部分情况下,不可能将所有需要的类都加载进来。【建议为true】

Exception in thread “main” java.lang.RuntimeException: Phantom refs not allowed
at soot.SootMethod.setPhantom(SootMethod.java:212)
at soot.SootResolver.processResolveWorklist(SootResolver.java:160)
at soot.Soot

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值