I think my invokevirtual execution is wrong because it doesn't actually

look for virtual methods on the type, which is why my unused method deob
does weird things. I am seeing methods that still exist after running it
that appear to be using non-inversible constants.
This commit is contained in:
Adam
2015-06-25 19:07:46 -04:00
parent 1eee5a48ae
commit 0543950013
7 changed files with 89 additions and 25 deletions

View File

@@ -0,0 +1,8 @@
package info.sigterm.deob.attributes.code.instruction.types;
import info.sigterm.deob.pool.Field;
public interface SetFieldInstruction
{
public Field getField();
}

View File

@@ -3,16 +3,18 @@ package info.sigterm.deob.attributes.code.instructions;
import info.sigterm.deob.attributes.code.Instruction;
import info.sigterm.deob.attributes.code.InstructionType;
import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.attributes.code.instruction.types.SetFieldInstruction;
import info.sigterm.deob.execution.Frame;
import info.sigterm.deob.execution.InstructionContext;
import info.sigterm.deob.execution.Stack;
import info.sigterm.deob.execution.StackContext;
import info.sigterm.deob.pool.Field;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class PutField extends Instruction
public class PutField extends Instruction implements SetFieldInstruction
{
private Field field;
@@ -45,4 +47,10 @@ public class PutField extends Instruction
frame.addInstructionContext(ins);
}
@Override
public Field getField()
{
return field;
}
}

View File

@@ -3,16 +3,18 @@ package info.sigterm.deob.attributes.code.instructions;
import info.sigterm.deob.attributes.code.Instruction;
import info.sigterm.deob.attributes.code.InstructionType;
import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.attributes.code.instruction.types.SetFieldInstruction;
import info.sigterm.deob.execution.Frame;
import info.sigterm.deob.execution.InstructionContext;
import info.sigterm.deob.execution.Stack;
import info.sigterm.deob.execution.StackContext;
import info.sigterm.deob.pool.Field;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class PutStatic extends Instruction
public class PutStatic extends Instruction implements SetFieldInstruction
{
private Field field;
@@ -44,4 +46,9 @@ public class PutStatic extends Instruction
frame.addInstructionContext(ins);
}
@Override
public Field getField()
{
return field;
}
}