Skip to content

Commit

Permalink
corax patch
Browse files Browse the repository at this point in the history
  • Loading branch information
notify-bibi committed Aug 30, 2023
1 parent 41fa088 commit d414ce0
Show file tree
Hide file tree
Showing 11 changed files with 39 additions and 16 deletions.
7 changes: 4 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,13 @@ version '0.9.2-SNAPSHOT'

java {
toolchain {
languageVersion = JavaLanguageVersion.of(16)
languageVersion = JavaLanguageVersion.of(17)
}
}

repositories {
mavenLocal()
maven { url "https://maven.aliyun.com/repository/central" }
mavenCentral()
}

Expand Down Expand Up @@ -68,8 +70,7 @@ subprojects {

java {
toolchain {
languageVersion = JavaLanguageVersion.of(16)
vendor = JvmVendorSpec.ADOPTIUM
languageVersion = JavaLanguageVersion.of(17)
}
}
publishing.publications {
Expand Down
11 changes: 11 additions & 0 deletions qilin.core/src/qilin/core/PTA.java
Original file line number Diff line number Diff line change
Expand Up @@ -255,4 +255,15 @@ public boolean mayAlias(Local l1, Local l2) {
PointsToSet pts2 = reachingObjects(l2).toCIPointsToSet();
return pts1.hasNonEmptyIntersection(pts2);
}

@Override
public soot.PointsToSet reachingObjectsOfArrayElement(soot.PointsToSet pointsToSet) {
return this.reachingObjectsOfArrayElement((PointsToSet)pointsToSet);
}


@Override
public soot.PointsToSet reachingObjects(soot.PointsToSet pointsToSet, SootField sootField) {
return this.reachingObjects((PointsToSet)pointsToSet, sootField);
}
}
4 changes: 4 additions & 0 deletions qilin.core/src/qilin/core/PTAScene.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import soot.util.IterableNumberer;
import soot.util.StringNumberer;

import java.util.List;
import java.util.Set;

public class PTAScene {
Expand Down Expand Up @@ -107,6 +108,9 @@ public FastHierarchy getOrMakeFastHierarchy() {
return sootScene.getOrMakeFastHierarchy();
}

public List<SootMethod> getEntryPoints() {
return Scene.v().getEntryPoints();
}
public SootClass loadClassAndSupport(String className) {
return sootScene.loadClassAndSupport(className);
}
Expand Down
2 changes: 1 addition & 1 deletion qilin.core/src/qilin/core/PointsToAnalysis.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
* @author Ondrej Lhotak
*/

public interface PointsToAnalysis {
public interface PointsToAnalysis extends soot.PointsToAnalysis {

int THIS_NODE = -1;
int RETURN_NODE = -2;
Expand Down
9 changes: 4 additions & 5 deletions qilin.core/src/qilin/core/builder/CallGraphBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import soot.util.queue.QueueReader;

import java.util.*;
import java.util.stream.Collectors;

public class CallGraphBuilder {
protected final Map<VarNode, Collection<VirtualCallSite>> receiverToSites;
Expand Down Expand Up @@ -107,10 +108,7 @@ private void constructCallGraph() {
}

public List<MethodOrMethodContext> getEntryPoints() {
Node thisRef = pag.getMethodPAG(PTAScene.v().getFakeMainMethod()).nodeFactory().caseThis();
thisRef = pta.parameterize(thisRef, pta.emptyContext());
pag.addEdge(pta.getRootNode(), thisRef);
return Collections.singletonList(pta.parameterize(PTAScene.v().getFakeMainMethod(), pta.emptyContext()));
return PTAScene.v().getEntryPoints().stream().map(x -> pta.parameterize(x, pta.emptyContext())).collect(Collectors.toList());
}

public void initReachableMethods() {
Expand Down Expand Up @@ -153,10 +151,11 @@ private void addVirtualEdge(MethodOrMethodContext caller, Unit callStmt, SootMet
public void injectCallEdge(Object heapOrType, MethodOrMethodContext callee, Kind kind) {
Map<Object, Stmt> stmtMap = methodToInvokeStmt.computeIfAbsent(callee.method(), k -> DataFactory.createMap());
if (!stmtMap.containsKey(heapOrType)) {
SootMethod rm = PTAScene.v().getMethod("<java.lang.ClassLoader: java.lang.Class loadClass(java.lang.String)>");
InvokeExpr ie = new JStaticInvokeExpr(callee.method().makeRef(), Collections.emptyList());
JInvokeStmt stmt = new JInvokeStmt(ie);
stmtMap.put(heapOrType, stmt);
handleCallEdge(new Edge(pta.parameterize(PTAScene.v().getFakeMainMethod(), pta.emptyContext()), stmtMap.get(heapOrType), callee, kind));
handleCallEdge(new Edge(pta.parameterize(rm, pta.emptyContext()), stmtMap.get(heapOrType), callee, kind));
}
}

Expand Down
2 changes: 1 addition & 1 deletion qilin.core/src/qilin/core/builder/FakeMainFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ private void makeFakeMain() {
addInvoke(defaultClassLoader, "<java.lang.ClassLoader: void <init>()>");
Value vClass = getNextLocal(RefType.v("java.lang.Class"));
Value vDomain = getNextLocal(RefType.v("java.security.ProtectionDomain"));
addInvoke(defaultClassLoader, "<java.lang.ClassLoader: java.lang.Class loadClassInternal(java.lang.String)>", sv);
addInvoke(defaultClassLoader, "<java.lang.ClassLoader: java.lang.Class loadClass(java.lang.String)>", sv);
addInvoke(defaultClassLoader, "<java.lang.ClassLoader: void checkPackageAccess(java.lang.Class,java.security.ProtectionDomain)>", vClass, vDomain);
addInvoke(defaultClassLoader, "<java.lang.ClassLoader: void addClass(java.lang.Class)>", vClass);

Expand Down
2 changes: 1 addition & 1 deletion qilin.core/src/qilin/core/sets/PointsToSet.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
*
* @author Ondrej Lhotak
*/
public interface PointsToSet {
public interface PointsToSet extends soot.PointsToSet {
/**
* Returns true if this set contains no run-time objects.
*/
Expand Down
5 changes: 5 additions & 0 deletions qilin.core/src/qilin/core/sets/UnmodifiablePointsToSet.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,11 @@ public boolean isEmpty() {
return pts.isEmpty();
}

@Override
public boolean hasNonEmptyIntersection(soot.PointsToSet pointsToSet) {
return hasNonEmptyIntersection((PointsToSet)pointsToSet);
}

@Override
public boolean contains(AllocNode n) {
return pts.contains(n.getNumber());
Expand Down
3 changes: 2 additions & 1 deletion qilin.core/src/qilin/util/PTAUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import soot.jimple.*;
import soot.jimple.toolkits.callgraph.CallGraph;
import soot.jimple.toolkits.callgraph.Edge;
import soot.options.Options;
import soot.util.NumberedString;
import soot.util.dot.DotGraph;
import soot.util.dot.DotGraphConstants;
Expand Down Expand Up @@ -248,7 +249,7 @@ public static boolean isUnresolved(Type type) {
return true;
}
SootClass cl = rt.getSootClass();
return cl.resolvingLevel() < SootClass.HIERARCHY;
return (!Options.v().ignore_resolving_levels()) && cl.resolvingLevel() < SootClass.HIERARCHY;
}

public static boolean castNeverFails(Type src, Type dst) {
Expand Down
4 changes: 0 additions & 4 deletions qilin.microben/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,9 @@ version '1.0-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(8)
vendor = JvmVendorSpec.ADOPTIUM
}
}

repositories {
mavenCentral()
}
sourceSets.main {
java.srcDirs = ['src']
}
6 changes: 6 additions & 0 deletions settings.gradle
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
pluginManagement {
repositories {
maven { url "https://maven.aliyun.com/repository/gradle-plugin" }
gradlePluginPortal()
}
}
rootProject.name = 'Qilin'
include 'qilin.util'
include 'qilin.core'
Expand Down

0 comments on commit d414ce0

Please sign in to comment.