Skip to content

Commit 9e6b1eb

Browse files
committed
chore(all): virtualise invoke construction
1 parent 9550089 commit 9e6b1eb

6 files changed

Lines changed: 100 additions & 9 deletions

File tree

dev.skidfuscator.gradle-plugin/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ plugins {
44
}
55

66
group = 'dev.skidfuscator'
7-
version = '0.1'
7+
version = '1.0.0'
88

99
gradlePlugin {
1010
plugins {
1111
skidfuscator {
12-
id = 'dev.skidfuscator'
12+
id = 'io.github.terminalsin'
1313
implementationClass = 'dev.skidfuscator.gradle.SkidfuscatorGradlePlugin'
1414
}
1515
}

dev.skidfuscator.gradle-plugin/src/main/java/dev/skidfuscator/gradle/SkidfuscatorCompileAction.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,16 @@ private Object buildSkidfuscatorSession(Class<?> aClass) throws NoSuchMethodExce
7979
boolean.class // analytics
8080
);
8181
return constructor.newInstance(
82-
spec.getInput(), spec.getOutput(), spec.getLibs(), spec.getMappings(), spec.getExempt(), spec.getRuntime(),
83-
spec.isPhantom(), spec.isJmod(), spec.isFuckit(), spec.isAnalytics());
82+
spec.getInput(),
83+
spec.getOutput(),
84+
spec.getLibs(),
85+
spec.getMappings(),
86+
spec.getExempt(),
87+
spec.getRuntime(),
88+
spec.isPhantom(),
89+
spec.isJmod(),
90+
spec.isFuckit(),
91+
spec.isAnalytics()
92+
);
8493
}
8594
}

org.mapleir.parent/org.mapleir.ir/src/main/java/org/mapleir/ir/cfg/DefaultBlockFactory.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@
88
import org.mapleir.ir.cfg.builder.ssa.CfgBuilder;
99
import org.mapleir.ir.cfg.builder.ssa.expr.*;
1010
import org.mapleir.ir.cfg.builder.ssa.expr.invoke.StaticInvocationExprBuilder;
11+
import org.mapleir.ir.cfg.builder.ssa.expr.invoke.VirtualInvocationExprBuilder;
1112
import org.mapleir.ir.cfg.builder.ssa.stmt.*;
1213
import org.mapleir.ir.cfg.builder.ssa.stmt.copy.CopyPhiStmtBuilder;
1314
import org.mapleir.ir.cfg.builder.ssa.stmt.copy.CopyVarStmtBuilder;
1415
import org.mapleir.ir.code.Expr;
1516
import org.mapleir.ir.code.expr.*;
1617
import org.mapleir.ir.code.expr.invoke.InvocationExpr;
1718
import org.mapleir.ir.code.expr.invoke.StaticInvocationExpr;
19+
import org.mapleir.ir.code.expr.invoke.VirtualInvocationExpr;
1820
import org.mapleir.ir.code.stmt.*;
1921
import org.mapleir.ir.code.stmt.copy.CopyPhiStmt;
2022
import org.mapleir.ir.code.stmt.copy.CopyVarStmt;
@@ -307,6 +309,63 @@ public ConstantExpr build() {
307309
};
308310
}
309311

312+
@Override
313+
public VirtualInvocationExprBuilder virtual_invoke_expr() {
314+
return new VirtualInvocationExprBuilder() {
315+
private InvocationExpr.CallType callType = InvocationExpr.CallType.VIRTUAL;
316+
private Expr[] args;
317+
private String owner;
318+
private String name;
319+
private String desc;
320+
321+
@Override
322+
public VirtualInvocationExprBuilder callType(InvocationExpr.CallType callType) {
323+
this.callType = callType;
324+
return this;
325+
}
326+
327+
@Override
328+
public VirtualInvocationExprBuilder args(Expr[] args) {
329+
this.args = args;
330+
return this;
331+
}
332+
333+
@Override
334+
public VirtualInvocationExprBuilder owner(String owner) {
335+
this.owner = owner;
336+
return this;
337+
}
338+
339+
@Override
340+
public VirtualInvocationExprBuilder name(String name) {
341+
this.name = name;
342+
return this;
343+
}
344+
345+
@Override
346+
public VirtualInvocationExprBuilder desc(String desc) {
347+
this.desc = desc;
348+
return this;
349+
}
350+
351+
@Override
352+
public VirtualInvocationExpr build() {
353+
assert owner != null : "Owner name cannot be null";
354+
assert name != null : "Name cannot be null";
355+
assert desc != null : "Description cannot be null";
356+
357+
358+
return new VirtualInvocationExpr(
359+
callType,
360+
args,
361+
owner,
362+
name,
363+
desc
364+
);
365+
}
366+
};
367+
}
368+
310369
@Override
311370
public StaticInvocationExprBuilder static_invoke_expr() {
312371
return new StaticInvocationExprBuilder() {

org.mapleir.parent/org.mapleir.ir/src/main/java/org/mapleir/ir/cfg/SSAFactory.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.mapleir.ir.cfg.builder.ssa.CfgBuilder;
55
import org.mapleir.ir.cfg.builder.ssa.expr.*;
66
import org.mapleir.ir.cfg.builder.ssa.expr.invoke.StaticInvocationExprBuilder;
7+
import org.mapleir.ir.cfg.builder.ssa.expr.invoke.VirtualInvocationExprBuilder;
78
import org.mapleir.ir.cfg.builder.ssa.stmt.*;
89
import org.mapleir.ir.cfg.builder.ssa.stmt.copy.CopyPhiStmtBuilder;
910
import org.mapleir.ir.cfg.builder.ssa.stmt.copy.CopyVarStmtBuilder;
@@ -46,6 +47,8 @@ public interface SSAFactory {
4647

4748
StaticInvocationExprBuilder static_invoke_expr();
4849

50+
VirtualInvocationExprBuilder virtual_invoke_expr();
51+
4952
CopyPhiStmtBuilder copy_phi_stmt();
5053

5154
CopyVarStmtBuilder copy_var_stmt();

org.mapleir.parent/org.mapleir.ir/src/main/java/org/mapleir/ir/cfg/builder/GenerationPass.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1267,7 +1267,14 @@ protected void _call(int op, String owner, String name, String desc) {
12671267
case Opcodes.INVOKEVIRTUAL:
12681268
case Opcodes.INVOKEINTERFACE:
12691269
case Opcodes.INVOKESPECIAL:
1270-
callExpr = new VirtualInvocationExpr(VirtualInvocationExpr.resolveCallType(op), args, owner, name, desc);
1270+
callExpr = builder.factory
1271+
.virtual_invoke_expr()
1272+
.callType(VirtualInvocationExpr.resolveCallType(op))
1273+
.args(args)
1274+
.owner(owner)
1275+
.name(name)
1276+
.desc(desc)
1277+
.build();
12711278
break;
12721279
case Opcodes.INVOKESTATIC:
12731280
callExpr = builder.factory
@@ -1732,10 +1739,8 @@ private void makeRanges(List<BasicBlock> order) {
17321739
* if the given descriptor isn't intended for getType
17331740
* (getObjectType instead), shouldn't have this problem now.*/
17341741
erange.addType(tc.type != null ? Type.getType("L" + tc.type + ";") : TypeUtils.THROWABLE);
1735-
1736-
ListIterator<BasicBlock> lit = range.listIterator();
1737-
while(lit.hasNext()) {
1738-
BasicBlock block = lit.next();
1742+
1743+
for (BasicBlock block : range) {
17391744
builder.graph.addEdge(new TryCatchEdge<>(block, erange));
17401745
}
17411746
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.mapleir.ir.cfg.builder.ssa.expr.invoke;
2+
3+
import org.mapleir.app.factory.Builder;
4+
import org.mapleir.ir.code.Expr;
5+
import org.mapleir.ir.code.expr.invoke.InvocationExpr;
6+
import org.mapleir.ir.code.expr.invoke.StaticInvocationExpr;
7+
import org.mapleir.ir.code.expr.invoke.VirtualInvocationExpr;
8+
9+
public interface VirtualInvocationExprBuilder extends Builder<VirtualInvocationExpr> {
10+
VirtualInvocationExprBuilder callType(InvocationExpr.CallType callType);
11+
VirtualInvocationExprBuilder args(Expr[] args);
12+
VirtualInvocationExprBuilder owner(String owner);
13+
VirtualInvocationExprBuilder name(String name);
14+
VirtualInvocationExprBuilder desc(String desc);
15+
}

0 commit comments

Comments
 (0)