diff --git a/src/main/java/info/sigterm/deob/ClassFile.java b/src/main/java/info/sigterm/deob/ClassFile.java
index 54d124bb8d..971ecb2cf5 100644
--- a/src/main/java/info/sigterm/deob/ClassFile.java
+++ b/src/main/java/info/sigterm/deob/ClassFile.java
@@ -1,5 +1,6 @@
package info.sigterm.deob;
+import info.sigterm.deob.attributes.Attributes;
import info.sigterm.deob.pool.Class;
import info.sigterm.deob.pool.UTF8;
@@ -81,7 +82,6 @@ public class ClassFile
if (other == null)
return; // inherits from a class not in my group
- assert other != null;
assert other != this;
this.parent = other;
diff --git a/src/main/java/info/sigterm/deob/Field.java b/src/main/java/info/sigterm/deob/Field.java
index abcfe78f65..87e27ee7be 100644
--- a/src/main/java/info/sigterm/deob/Field.java
+++ b/src/main/java/info/sigterm/deob/Field.java
@@ -1,9 +1,11 @@
package info.sigterm.deob;
+import info.sigterm.deob.attributes.Attributes;
+
import java.io.DataInputStream;
import java.io.IOException;
-class Field
+public class Field
{
private Fields fields;
diff --git a/src/main/java/info/sigterm/deob/Method.java b/src/main/java/info/sigterm/deob/Method.java
index 0fde3853bf..ec86718936 100644
--- a/src/main/java/info/sigterm/deob/Method.java
+++ b/src/main/java/info/sigterm/deob/Method.java
@@ -1,9 +1,13 @@
package info.sigterm.deob;
+import info.sigterm.deob.attributes.AttributeType;
+import info.sigterm.deob.attributes.Attributes;
+import info.sigterm.deob.attributes.Code;
+
import java.io.DataInputStream;
import java.io.IOException;
-class Method
+public class Method
{
private Methods methods;
@@ -28,4 +32,9 @@ class Method
{
return methods;
}
+
+ public Code getCode()
+ {
+ return (Code) attributes.findType(AttributeType.CODE);
+ }
}
diff --git a/src/main/java/info/sigterm/deob/attributes/Attribute.java b/src/main/java/info/sigterm/deob/attributes/Attribute.java
index 76922506eb..e9257db166 100644
--- a/src/main/java/info/sigterm/deob/attributes/Attribute.java
+++ b/src/main/java/info/sigterm/deob/attributes/Attribute.java
@@ -1,7 +1,5 @@
package info.sigterm.deob.attributes;
-import info.sigterm.deob.Attributes;
-
import java.io.DataInputStream;
import java.io.IOException;
@@ -25,6 +23,11 @@ public class Attribute
return attributes;
}
+ public AttributeType getType()
+ {
+ return type;
+ }
+
public int getLength()
{
return length;
diff --git a/src/main/java/info/sigterm/deob/Attributes.java b/src/main/java/info/sigterm/deob/attributes/Attributes.java
similarity index 77%
rename from src/main/java/info/sigterm/deob/Attributes.java
rename to src/main/java/info/sigterm/deob/attributes/Attributes.java
index 5e34bbba53..f5def18e04 100644
--- a/src/main/java/info/sigterm/deob/Attributes.java
+++ b/src/main/java/info/sigterm/deob/attributes/Attributes.java
@@ -1,8 +1,8 @@
-package info.sigterm.deob;
+package info.sigterm.deob.attributes;
-import info.sigterm.deob.attributes.Attribute;
-import info.sigterm.deob.attributes.AttributeType;
-import info.sigterm.deob.attributes.Code;
+import info.sigterm.deob.ClassFile;
+import info.sigterm.deob.Field;
+import info.sigterm.deob.Method;
import info.sigterm.deob.pool.UTF8;
import java.io.DataInputStream;
@@ -19,21 +19,21 @@ public class Attributes
private int count;
private Attribute[] attributes;
- Attributes(ClassFile cf) throws IOException
+ public Attributes(ClassFile cf) throws IOException
{
classFile = cf;
load();
}
- Attributes(Field f) throws IOException
+ public Attributes(Field f) throws IOException
{
field = f;
load();
}
- Attributes(Method m) throws IOException
+ public Attributes(Method m) throws IOException
{
method = m;
@@ -47,6 +47,14 @@ public class Attributes
load();
}
+ public Attribute findType(AttributeType type)
+ {
+ for (Attribute a : attributes)
+ if (a.getType() == type)
+ return a;
+ return null;
+ }
+
public ClassFile getClassFile()
{
if (classFile != null)
diff --git a/src/main/java/info/sigterm/deob/attributes/Code.java b/src/main/java/info/sigterm/deob/attributes/Code.java
index 9701320bbc..38d8628797 100644
--- a/src/main/java/info/sigterm/deob/attributes/Code.java
+++ b/src/main/java/info/sigterm/deob/attributes/Code.java
@@ -1,6 +1,5 @@
package info.sigterm.deob.attributes;
-import info.sigterm.deob.Attributes;
import info.sigterm.deob.attributes.code.Exceptions;
import info.sigterm.deob.attributes.code.Instructions;
@@ -29,4 +28,14 @@ public class Code extends Attribute
exceptions = new Exceptions(this);
attributes = new Attributes(this);
}
+
+ public int getMaxStack()
+ {
+ return getMaxStack();
+ }
+
+ public int getMaxLocals()
+ {
+ return maxLocals;
+ }
}
diff --git a/src/main/java/info/sigterm/deob/attributes/ConstantValue.java b/src/main/java/info/sigterm/deob/attributes/ConstantValue.java
index 4c90a265e9..e2cbea2271 100644
--- a/src/main/java/info/sigterm/deob/attributes/ConstantValue.java
+++ b/src/main/java/info/sigterm/deob/attributes/ConstantValue.java
@@ -1,7 +1,5 @@
package info.sigterm.deob.attributes;
-import info.sigterm.deob.Attributes;
-
import java.io.DataInputStream;
import java.io.IOException;
diff --git a/src/main/java/info/sigterm/deob/attributes/Unknown.java b/src/main/java/info/sigterm/deob/attributes/Unknown.java
index a01243bede..88528adb7f 100644
--- a/src/main/java/info/sigterm/deob/attributes/Unknown.java
+++ b/src/main/java/info/sigterm/deob/attributes/Unknown.java
@@ -1,7 +1,5 @@
package info.sigterm.deob.attributes;
-import info.sigterm.deob.Attributes;
-
import java.io.DataInputStream;
import java.io.IOException;
diff --git a/src/main/java/info/sigterm/deob/attributes/code/Instruction.java b/src/main/java/info/sigterm/deob/attributes/code/Instruction.java
index ba7b399bd1..a0c47255d1 100644
--- a/src/main/java/info/sigterm/deob/attributes/code/Instruction.java
+++ b/src/main/java/info/sigterm/deob/attributes/code/Instruction.java
@@ -1,5 +1,7 @@
package info.sigterm.deob.attributes.code;
+import info.sigterm.deob.execution.Execution;
+
import java.util.ArrayList;
public class Instruction
@@ -43,4 +45,8 @@ public class Instruction
public void buildJumpGraph()
{
}
+
+ public void execute(Execution e)
+ {
+ }
}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/InvokeStatic.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/InvokeStatic.java
index 0e0f1b4ca9..231bfd51a0 100644
--- a/src/main/java/info/sigterm/deob/attributes/code/instructions/InvokeStatic.java
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/InvokeStatic.java
@@ -19,5 +19,4 @@ public class InvokeStatic extends Instruction
index = is.readUnsignedShort();
length += 2;
}
-
}
diff --git a/src/main/java/info/sigterm/deob/execution/Execution.java b/src/main/java/info/sigterm/deob/execution/Execution.java
new file mode 100644
index 0000000000..79527d5866
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/execution/Execution.java
@@ -0,0 +1,19 @@
+package info.sigterm.deob.execution;
+
+import info.sigterm.deob.ClassGroup;
+import info.sigterm.deob.pool.Method;
+
+public class Execution
+{
+ private ClassGroup group;
+ private java.util.Stack frames = new java.util.Stack();
+
+ public Execution(ClassGroup group)
+ {
+ this.group = group;
+ }
+
+ public void run(Method method, Object... args)
+ {
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/execution/Frame.java b/src/main/java/info/sigterm/deob/execution/Frame.java
new file mode 100644
index 0000000000..5a96c404a7
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/execution/Frame.java
@@ -0,0 +1,23 @@
+package info.sigterm.deob.execution;
+
+import info.sigterm.deob.Method;
+import info.sigterm.deob.attributes.Code;
+
+public class Frame
+{
+ private Execution execution;
+ private Method method;
+ private Stack stack;
+ private Variables variables;
+
+ public Frame(Execution execution, Method method)
+ {
+ Code code = method.getCode();
+
+ this.execution = execution;
+ this.method = method;
+
+ stack = new Stack(code.getMaxStack());
+ variables = new Variables(code.getMaxLocals());
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/execution/Stack.java b/src/main/java/info/sigterm/deob/execution/Stack.java
new file mode 100644
index 0000000000..6482a3d510
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/execution/Stack.java
@@ -0,0 +1,28 @@
+package info.sigterm.deob.execution;
+
+public class Stack
+{
+ private int size;
+ private Object[] stack;
+
+ public Stack(int sz)
+ {
+ stack = new Object[sz];
+ }
+
+ public void push(Object obj)
+ {
+ if (size == stack.length)
+ throw new RuntimeException("Stack overflow");
+
+ stack[size++] = obj;
+ }
+
+ public Object pop()
+ {
+ if (size <= 0)
+ throw new RuntimeException("Stack underflow");
+
+ return stack[--size];
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/execution/Variables.java b/src/main/java/info/sigterm/deob/execution/Variables.java
new file mode 100644
index 0000000000..634d953f96
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/execution/Variables.java
@@ -0,0 +1,11 @@
+package info.sigterm.deob.execution;
+
+public class Variables
+{
+ private Object variables;
+
+ public Variables(int sz)
+ {
+ variables = new Object[sz];
+ }
+}