[![Build Status](https://github.com/soot-oss/soot/workflows/Soot%20CI/badge.svg?branch=master)](https://github.com/soot-oss/soot/actions)
[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/soot-oss/soot)
# Using Soot? Let us know about it!
We are regularly applying for funding to help us maintain Soot. You can help us immensely by letting us know about [**projects that use Soot**](https://github.com/soot-oss/soot/wiki/Users-of-Soot), both commercially or in the form of research tools.
Also many thanks to [![JProfiler](https://www.ej-technologies.com/images/product_banners/jprofiler_small.png)](https://www.ej-technologies.com/products/jprofiler/overview.html) for supporting Soot with a free-to-use open source license!
# Thanks to our Sponsors...
... for supporting the further Development of Soot!
Amazon Web Services is a Gold Sponsor. [![AWS](https://upload.wikimedia.org/wikipedia/commons/thumb/9/93/Amazon_Web_Services_Logo.svg/150px-Amazon_Web_Services_Logo.svg.png)]()
[Read more here about how to become a sponsor on your own.](https://github.com/sponsors/soot-oss)
# Soot supports Java 9 modules now!
Try and get involved in Soot's Java 9 bleeding edge development.
## What works and is tested?
* Automatic modules (modules automatically created from jars in the module-path)
* Named modules
* Exploded modules
* Modular jar files
* Resolving modules in Soot's `ModuleScene`
* Spark
## What does not work yet?
* Anonymous modules (mixing module- and class-path)
* Multi-module jar files
# What is Soot?
Soot is a Java optimization framework. It provides four intermediate representations for analyzing and transforming Java bytecode:
* Baf: a streamlined representation of bytecode which is simple to manipulate.
* Jimple: a typed 3-address intermediate representation suitable for optimization.
* Shimple: an SSA variation of Jimple.
* Grimp: an aggregated version of Jimple suitable for decompilation and code inspection.
See https://soot-oss.github.io/soot for details.
# How do I get started with Soot?
We have some documentation on Soot in the [wiki](https://github.com/soot-oss/soot/wiki) and also a large range of [tutorials](https://github.com/soot-oss/soot/wiki/Tutorials) on Soot.
For detailed information please also consider the Soot's [JavaDoc and Options](https://github.com/soot-oss/soot/wiki/Options-and-JavaDoc) Documentations.
# Including Soot in your Project
A Soot release is currently built for each commit to the `master` branch. You can include Soot as
a dependency via Maven, Gradle, SBT, etc using the following coordinates:
```.xml
<dependencies>
<dependency>
<groupId>org.soot-oss</groupId>
<artifactId>soot</artifactId>
<version>4.3.0</version>
</dependency>
</dependencies>
```
You can also obtain older builds of the `master` branch. A complete listing of builds can be found on [Maven Central](https://repo.maven.apache.org/maven2/org/soot-oss/soot/).
A Soot SNAPSHOT is currently built for each commit to the `develop` branch. You can include Soot as
a dependency via Maven, Gradle, SBT, etc using the following coordinates:
```.xml
<dependencies>
<dependency>
<groupId>org.soot-oss</groupId>
<artifactId>soot</artifactId>
<version>4.3.0-SNAPSHOT</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>sonatype-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
```
You can also obtain older builds of the `develop` branch. A complete listing of builds can be found on [Maven Central](https://oss.sonatype.org/content/repositories/snapshots/org/soot-oss/soot/).
# How do I obtain Soot without Maven?
**We recommend using Soot with Maven**
You can obtain the latest release build of Soot [directly](https://repo1.maven.org/maven2/org/soot-oss/soot/).
You can obtain the latest SNAPSHOT build of Soot [directly](https://oss.sonatype.org/content/repositories/snapshots/org/soot-oss/soot/).
The `soot-<RELEASE>-jar-with-dependencies.jar` file is an all-in-one file that also contains all the required libraries.
The `soot-<RELEASE>.jar` file contains only Soot, allowing you to manually pick dependencies as you need them. If you do not want to bother with dependencies, we recommend using the former.
# Building Soot yourself
If you cannot work with the prebuild versions and need to build Soot on your own, please consider the [wiki](https://github.com/soot-oss/soot/wiki/Building-Soot-from-the-Command-Line-(Recommended)) for further steps.
# About Soot's source code
Soot follows the git-flow convention. Releases and hotfixes are maintained in the master branch.
Development happens in the develop branch. To catch the bleeding edge of Soot, check out the latter.
In case of any questions, please consult the Soot
mailing list at: http://www.sable.mcgill.ca/mailman/listinfo/soot-list/
# How do I contribute to Soot?
We are happy to accept arbitrary improvements to Soot in form of GitHub pull requests. Please read our [contribution guidelines](https://github.com/soot-oss/soot/blob/master/CONTRIBUTING.md) before setting up a pull request.
# Please help us improve Soot!
You are using Soot and would like to help us support it in the future? Then please support us by filling out [this little web form](https://goo.gl/forms/rk1oSxFIxAH0xaf52).
That way you can help us in two ways:
* By letting us know how we can improve Soot you can directly help us prioritize newly planned features.
* By stating your name and affiliation you help us showcasing Soot’s large user base.
Thanks!
# How to use Soot's Java 9 Features?
## Use from Source Code
To load modules in Soot's `ModuleScene` from java:
```.java
// configure Soot's options, refer to example configurations below
Options.v().set_soot_modulepath(modulePath);
// load classes from modules into Soot
// Here, getClassUnderModulePath() expects the module path to be set using the Options class as seen above
Map<String, List<String>> map = ModulePathSourceLocator.v().getClassUnderModulePath(modulePath);
for (String module : map.keySet()) {
for (String klass : map.get(module)) {
logger.info("Loaded Class: " + klass + "\n");
loadClass(klass, false, module);
// the loadClass() method is defined below
}
}
//this must be called after all classes are loaded
Scene.v().loadNecessaryClasses();
public static SootClass loadClass(String name, boolean main, String module) {
SootClass c = ModuleScene.v().loadClassAndSupport(name, Optional.of(module));
c.setApplicationClass();
if (main)
Scene.v().setMainClass(c);
return c;
}
```
ModuleUtil.module_mode() helps you check whether you have modules enabled in Soot. This is done based on whether the module path is set using the Options class.
### Example Configurations: Java 8, Java >= 9 Classpath, Java >= 9 Modulepath
```.java
if(java < 9 ) { // when you have a target benchmark with Java < 9 and hence no modules
Options.v().set_prepend_classpath(true);
Options.v().set_process_dir(Arrays.asList(applicationClassPath().split(File.pathSeparator)));
Options.v().set_soot_classpath(sootClassPath());
}
if(java >= 9 && USE_CLASSPATH) { // when you have a target benchmark with Java >= 9 and do not want module support
Options.v().set_soot_classpath("VIRTUAL_FS_FOR_JDK" + File.pathSeparator + sootClassPath());
Options.v().set_process_dir(Arrays.asList(applicationClassPath().split(File.pathSeparator)));
}
if(java>=9 && USE_MODULEPATH) { // when you have a target benchmark with Java >= 9 and want module support
Options.v().set_prepend_classpath(true);
Options.v().set_soot_modulepath(sootClassPath());
Options.v().set_process_dir(Arrays.asList(applicationClassPath().split(File.pathSeparator)));
}
```
In the above examp
没有合适的资源?快使用搜索试试~ 我知道了~
Soot - A Java optimization framework.zip
共2000个文件
java:1945个
html:36个
txt:6个
需积分: 1 0 下载量 19 浏览量
2023-12-29
20:40:14
上传
评论
收藏 21.04MB ZIP 举报
温馨提示
Soot - A Java optimization framework.zip
资源推荐
资源详情
资源评论
收起资源包目录
Soot - A Java optimization framework.zip (2000个子文件)
soot_options.css 81B
soot_options.htm 246KB
doc.html 39KB
NullnessAnalysis.html 17KB
index.html 8KB
LiveVariablesAnalysis.html 5KB
NullnessAnalysisColorer.html 5KB
NullnessDriver.html 4KB
faq.html 4KB
NullTagAggregator.html 2KB
index.html 1KB
package.html 1KB
package.html 1KB
package.html 1KB
package.html 1019B
package.html 1015B
package.html 1012B
package.html 1008B
package.html 1006B
package.html 1003B
package.html 1001B
package.html 993B
package.html 967B
package.html 959B
package.html 946B
package.html 937B
package.html 924B
package.html 923B
package.html 909B
package.html 892B
package.html 876B
package.html 873B
package.html 872B
package.html 870B
package.html 855B
NullExample.html 758B
foo.html 724B
Main.html 705B
JimpleBodyBuilder.java 188KB
T14rj2.java 83KB
T1414rj1.java 83KB
T14rj1.java 83KB
JasminClass.java 79KB
DemandCSPointsTo.java 72KB
UnitThrowAnalysisTest.java 62KB
GeomPointsTo.java 58KB
AsmMethodSourceOrigNamesTest.java 57KB
ThrowableSetTest.java 55KB
OnFlyCallGraphBuilder.java 54KB
Walker.java 50KB
PAG.java 49KB
PegGraph.java 46KB
DalvikTyper.java 44KB
LockAllocator.java 42KB
GraphComparer.java 41KB
ClassResolver.java 40KB
SootClass.java 39KB
DexBody.java 38KB
DefaultInterfaceTest.java 37KB
MhpAnalysis.java 36KB
PurityGraph.java 36KB
ArrayBoundsCheckerAnalysis.java 35KB
ClassLocalObjectsAnalysis.java 35KB
LockableReferenceAnalysis.java 34KB
DexAnnotation.java 33KB
ReflectiveCallsInliner.java 33KB
CriticalSectionAwareSideEffectAnalysis.java 32KB
SmartMethodInfoFlowAnalysis.java 30KB
PegChain.java 29KB
BranchedRefVarsAnalysis.java 28KB
FullSensitiveNode.java 27KB
ConstraintChecker.java 27KB
AbstractASMBackend.java 27KB
ConstraintCheckerBV.java 27KB
LockAllocationBodyTransformer.java 27KB
Jimple.java 26KB
ConstraintChecker.java 26KB
TypeResolverBV.java 25KB
Grimp.java 24KB
VirtualEdgesSummaries.java 24KB
Hierarchy.java 24KB
AbstractJasminClass.java 24KB
StackTypeHeightCalculator.java 24KB
TypeResolver.java 24KB
LocalObjectsAnalysis.java 23KB
AbstractLambdaMetaFactoryCGTest.java 22KB
SimpleMethodInfoFlowAnalysis.java 22KB
HeapInsNode.java 22KB
GeomEvaluator.java 22KB
MethodRenamer.java 21KB
Main.java 21KB
RectangularArrayFinder.java 21KB
ConstraintCollectorBV.java 21KB
PtInsNode.java 21KB
ConstraintCollector.java 20KB
ExceptionTestUtility.java 20KB
ConstraintCollector.java 20KB
ArrayIndexLivenessAnalysis.java 20KB
FindDuplicateSequences.java 20KB
InitialResolver.java 20KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
zero2100
- 粉丝: 160
- 资源: 2464
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 电子万年历软件仿真(经过多次修改,保证正确性)
- Unity XR 手势射击控制脚本(适用于任何可手势识别的设备)
- 机械设计全自动电表(NB和IC卡表)控制和上壳装配线sw16可编辑非常好的设计图纸100%好用.zip
- 基于matlab的EAN-13条形码识别系统GUI界面.zip代码53
- matlab基于bp神经网络交通信号标志识别GUI界面13个标志.zip代码54
- 电子万年历答辩实物展示视频mp4格式
- 基于python实现的程序,包括哈希感知算法cvHash,图像切割cvsplit,固定目标检测cvRec(附文档ppt)等
- 计算0-10000之间所有偶数的和
- multiled.zip
- 基于php实现的哈希算法的人脸检索
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功