This commit is contained in:
Adam
2015-11-19 20:31:27 -05:00
parent a3a5b148df
commit 765b5d7467
3 changed files with 4 additions and 163 deletions

View File

@@ -7,7 +7,6 @@ import net.runelite.deob.Method;
import net.runelite.deob.attributes.code.Instruction;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
@@ -20,7 +19,6 @@ import net.runelite.deob.attributes.code.instruction.types.GetFieldInstruction;
import net.runelite.deob.attributes.code.instruction.types.InvokeInstruction;
import net.runelite.deob.attributes.code.instructions.InvokeStatic;
import net.runelite.deob.deobfuscators.arithmetic.Encryption;
import net.runelite.deob.deobfuscators.rename.Rename2;
import net.runelite.deob.deobfuscators.rename.graph.EdgeType;
import net.runelite.deob.deobfuscators.rename.graph.Graph;
import org.apache.commons.collections4.map.MultiValueMap;
@@ -110,25 +108,16 @@ public class Execution
private void addFrame(Frame frame)
{
frames.add(frame);
//frames.add(0, frame);
}
public void invoke(InstructionContext from, Method to)
{
Frame frame = from.getFrame();
// if (!this.isFollowInvokes() && !to.isStatic())
// return;
if (hasInvoked(from, to))
return;
Frame f = new Frame(this, to);
f.initialize(from);
this.addFrame(f);
// if (!this.followInvokes && to.isStatic())
// frame.stop(); // frames continue from the method
}
public void addMethod(Method to)
@@ -158,16 +147,9 @@ public class Execution
assert frame.isExecuting();
frame.execute();
// if (!frame.isExecuting())
// {
assert frames.get(0) == frame;
frames.remove(frame);
processedFrames.add(frame);
// }
// else
// {
// // another frame takes priority
// }
assert frames.get(0) == frame;
frames.remove(0);
processedFrames.add(frame);
}
System.out.println("Processed " + fcount + " frames");

View File

@@ -60,15 +60,9 @@ public class Frame
// initialize frame from invoking context
assert ctx.getInstruction() instanceof InvokeInstruction;
//if (!this.getExecution().isFollowInvokes() && this.getMethod().isStatic())
if (this.getMethod().isStatic())
{
//assert this.nonStatic == null;
this.nonStatic = ctx.getFrame().nonStatic;
//assert from == null;
//from = ctx.getFrame();
//this.ctx = ctx.getFrame().ctx; // share ctx if this method is static
//this.prevVertex = ctx.getFrame().prevVertex;
}
// initialize LVT. the last argument is popped first, and is at arguments[0]
@@ -104,10 +98,7 @@ public class Frame
this.stack = new Stack(other.stack);
this.variables = new Variables(other.variables);
this.ctx = other.ctx;
//this.prevVertex = new MutableInt(other.prevVertex);
//this.prevInvokes = other.prevInvokes;
nonStatic = other.nonStatic;
// from = other.from;
this.nonStatic = other.nonStatic;
}
public Frame dup()
@@ -220,13 +211,6 @@ public class Frame
{
/* jump */
}
// if (!execution.frames.isEmpty() && execution.frames.get(0) != this)
// {
// stop(); // the prev frame must be an invokestatic?
// assert execution.frames.get(0).getMethod().isStatic();
// break;
// }
}
}
@@ -272,25 +256,4 @@ public class Frame
cur = to;
}
// private boolean processReturn()
// {
// if (this.getExecution().isFollowInvokes() || !this.getMethod().isStatic())
// return false;
//
// if (from == null)
// return false;
//
// assert !from.isExecuting();
//
// // update method, cur, stack, variables, from outermost method
// this.method = from.method;
// //this.executing = from.executing;
// this.cur = from.cur;
// this.stack = new Stack(from.stack);
// this.variables = new Variables(from.variables);
//
// //stop(); // now that weve switched this should still be running
// return true; // this stops frame execution
// }
}

View File

@@ -1,37 +1,19 @@
package net.runelite.deob.execution;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import net.runelite.deob.Method;
import net.runelite.deob.attributes.code.Instruction;
import net.runelite.deob.attributes.code.instruction.types.FieldInstruction;
import net.runelite.deob.attributes.code.instruction.types.InvokeInstruction;
import net.runelite.deob.attributes.code.instructions.InvokeStatic;
import net.runelite.deob.deobfuscators.rename.graph.Graph;
import org.apache.commons.collections4.map.MultiValueMap;
public class MethodContext
{
private Execution execution;
private MultiValueMap<InstructionContext, Instruction> visited = new MultiValueMap<>();
//private IdGen ids = new IdGen();
//private Map<Integer, List<Method>> idMap = new HashMap<>();
//private Map<List<Method>, Integer> insMap = new HashMap<>();
// private Graph graph = new Graph();
public MethodContext(Execution execution)
{
this.execution = execution;
}
// public Map<Integer, List<Method>> getIdMap()
// {
// return idMap;
// }
protected boolean hasJumped(InstructionContext from, Instruction to)
{
Collection<Instruction> i = visited.getCollection(from);
@@ -41,90 +23,4 @@ public class MethodContext
visited.put(from, to);
return false;
}
// private int getIdFor(List<Method> i)
// {
// if (insMap.containsKey(i))
// return insMap.get(i);
//
// assert idMap.values().contains(i) == false;
//
// int id = ids.get();
//
// //graph.add(id);
//
// this.idMap.put(id, i);
// this.insMap.put(i, id);
//
// return id;
// }
// protected void buildGraph(Frame frame, Instruction i)
// {
// if (!execution.isBuildGraph())
// return;
//
// List<Object> to;
// //List<Method> methods;
// if (i instanceof InvokeInstruction)
// {
// if (i instanceof InvokeStatic)
// return;
//
// InvokeInstruction ii = (InvokeInstruction) i;
//
// List<Method> methods = ii.getMethods();
// if (methods.isEmpty())
// return;
//
// to = (List) methods;
// }
// else if (i instanceof FieldInstruction)
// {
// FieldInstruction fi = (FieldInstruction) i;
//
// if (fi.getMyField() == null)
// return;
//
// to = Arrays.asList(fi.getMyField());
// }
// else
// {
// return;
// }
//
// to.stream().forEach(o -> graph.addEdge(frame.getMethod(), o));
//
//// if (frame.prevVertex.intValue() == -1)
//// {
//// int id = getIdFor(methods);
//// //int id = ids.get();
//// //graph.add(id);
//// frame.prevVertex.setValue(id);
//// //this.idMap.put(id, i);
//// return;
//// }
////
//// int id = getIdFor(methods);
//// //int id = ids.get();
//// //graph.add(id);
//// //idMap.put(id, i);
////
//// if (frame.prevVertex.intValue() == id)
//// return;
////
//// DirectedEdge edge = new SimpleDirectedEdge(frame.prevVertex.intValue(), id);
////
//// if (graph.contains(edge) == false)
//// {
//// List<Method> from = this.idMap.get(frame.prevVertex.intValue()), to = this.idMap.get(id);
//// System.out.println("Added edge " + from.get(0).getMethods().getClassFile().getName() + "." + from.get(0).getName() +
//// " to " + to.get(0).getMethods().getClassFile().getName() + "." + to.get(0).getName() +
//// " (" + frame.prevVertex.intValue() + " -> " + id + ")");
////
//// graph.add(edge);
//// }
////
//// frame.prevVertex.setValue(id);
// }
}