Add field references, only for getstatic currently

This commit is contained in:
Adam
2014-12-01 17:00:55 -05:00
parent 228f650b6c
commit 4a24560be5
15 changed files with 162 additions and 12 deletions

View File

@@ -38,4 +38,9 @@ public class Code extends Attribute
{
return maxLocals;
}
public void buildInstructionGraph()
{
instructions.buildInstructionGraph();
}
}

View File

@@ -22,6 +22,11 @@ public class Instruction
this.pc = pc;
}
public Instructions getInstructions()
{
return instructions;
}
public int getPc()
{
return pc;
@@ -46,6 +51,10 @@ public class Instruction
{
}
public void buildInstructionGraph()
{
}
public void execute(Execution e)
{
}

View File

@@ -53,6 +53,12 @@ public class Instructions
i.buildJumpGraph();
}
public void buildInstructionGraph()
{
for (Instruction i : instructions)
i.buildInstructionGraph();
}
public Code getCode()
{
return code;

View File

@@ -1,8 +1,13 @@
package info.sigterm.deob.attributes.code.instructions;
import info.sigterm.deob.ClassFile;
import info.sigterm.deob.ConstantPool;
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.pool.Class;
import info.sigterm.deob.pool.Field;
import info.sigterm.deob.pool.NameAndType;
import java.io.DataInputStream;
import java.io.IOException;
@@ -20,4 +25,23 @@ public class GetStatic extends Instruction
length += 2;
}
@Override
public void buildInstructionGraph()
{
ConstantPool pool = this.getInstructions().getCode().getAttributes().getClassFile().getPool();
Field entry = (Field) pool.getEntry(index);
Class clazz = entry.getClassEntry();
NameAndType nat = entry.getNameAndType();
ClassFile cf = this.getInstructions().getCode().getAttributes().getClassFile().getGroup().findClass(clazz.getName());
if (cf == null)
return;
info.sigterm.deob.Field f = cf.findField(nat);
assert f != null;
f.addReference(this);
}
}