Remove pool entry pool reference

This commit is contained in:
Adam
2015-07-07 12:49:37 -04:00
parent be127c55cb
commit c92387e089
18 changed files with 78 additions and 94 deletions

View File

@@ -52,7 +52,7 @@ public class ConstantPool
} }
for (PoolEntry entry : entries) for (PoolEntry entry : entries)
entry.resolve(); entry.resolve(this);
} }
public void reset() public void reset()
@@ -71,7 +71,7 @@ public class ConstantPool
for (int i = 0; i < entries.size(); ++i) for (int i = 0; i < entries.size(); ++i)
{ {
PoolEntry entry = entries.get(i); PoolEntry entry = entries.get(i);
entry.prime(); entry.prime(this);
} }
int size = 0; int size = 0;
@@ -152,7 +152,6 @@ public class ConstantPool
entries.add(entry); entries.add(entry);
entry.id = i; entry.id = i;
entry.pool = this;
return i; return i;
} }
@@ -164,19 +163,19 @@ public class ConstantPool
public int make(Object object) public int make(Object object)
{ {
if (object instanceof String) if (object instanceof String)
return make(new info.sigterm.deob.pool.String(this, (String) object)); return make(new info.sigterm.deob.pool.String((String) object));
if (object instanceof Integer) if (object instanceof Integer)
return make(new info.sigterm.deob.pool.Integer(this, (int) object)); return make(new info.sigterm.deob.pool.Integer((int) object));
if (object instanceof Float) if (object instanceof Float)
return make(new info.sigterm.deob.pool.Float(this, (float) object)); return make(new info.sigterm.deob.pool.Float((float) object));
if (object instanceof Long) if (object instanceof Long)
return make(new info.sigterm.deob.pool.Long(this, (long) object)); return make(new info.sigterm.deob.pool.Long((long) object));
if (object instanceof Double) if (object instanceof Double)
return make(new info.sigterm.deob.pool.Double(this, (double) object)); return make(new info.sigterm.deob.pool.Double((double) object));
System.err.println("Constant pool make with unknown object " + object + " type " + object.getClass()); System.err.println("Constant pool make with unknown object " + object + " type " + object.getClass());

View File

@@ -147,7 +147,7 @@ public class InvokeInterface extends Instruction implements InvokeInstruction
sig.remove(idx); sig.remove(idx);
// create new method pool object // create new method pool object
method = new InterfaceMethod(method.getPool(), clazz, new NameAndType(nat.getPool(), nat.getName(), sig)); method = new InterfaceMethod(clazz, new NameAndType(nat.getName(), sig));
} }
@Override @Override

View File

@@ -139,7 +139,7 @@ public class InvokeSpecial extends Instruction implements InvokeInstruction
sig.remove(idx); sig.remove(idx);
// create new method pool object // create new method pool object
method = new Method(method.getPool(), clazz, new NameAndType(nat.getPool(), nat.getName(), sig)); method = new Method(clazz, new NameAndType(nat.getName(), sig));
} }
@Override @Override

View File

@@ -136,7 +136,7 @@ public class InvokeStatic extends Instruction implements InvokeInstruction
sig.remove(idx); sig.remove(idx);
// create new method pool object // create new method pool object
method = new Method(method.getPool(), clazz, new NameAndType(nat.getPool(), nat.getName(), sig)); method = new Method(clazz, new NameAndType(nat.getName(), sig));
} }
@Override @Override

View File

@@ -146,7 +146,7 @@ public class InvokeVirtual extends Instruction implements InvokeInstruction
sig.remove(idx); sig.remove(idx);
// create new method pool object // create new method pool object
method = new Method(method.getPool(), clazz, new NameAndType(nat.getPool(), nat.getName(), sig)); method = new Method(clazz, new NameAndType(nat.getName(), sig));
} }
@Override @Override

View File

@@ -749,7 +749,7 @@ public class ModularArithmeticDeobfuscation
//assert m.setter == modInverse(m.getter); //assert m.setter == modInverse(m.getter);
int newConstant = constant * m.setter; int newConstant = constant * m.setter;
pc.setConstant(new info.sigterm.deob.pool.Integer(pc.getConstant().getPool(), newConstant)); pc.setConstant(new info.sigterm.deob.pool.Integer(newConstant));
if (newConstant != 1) if (newConstant != 1)
System.out.println("new constant: " + newConstant); System.out.println("new constant: " + newConstant);
else else
@@ -777,7 +777,7 @@ public class ModularArithmeticDeobfuscation
// field = setter * value, solve for value by * modInverse(setter) // field = setter * value, solve for value by * modInverse(setter)
int newConstant = constant * m.getter; int newConstant = constant * m.getter;
pi.setConstant(new info.sigterm.deob.pool.Integer(pi.getConstant().getPool(), newConstant)); pi.setConstant(new info.sigterm.deob.pool.Integer(newConstant));
++replaced; ++replaced;
} }
else if (value.getPushed().getInstruction() instanceof IMul) else if (value.getPushed().getInstruction() instanceof IMul)
@@ -812,7 +812,7 @@ public class ModularArithmeticDeobfuscation
// field = expression * constant // field = expression * constant
int newConstant = constant * m.getter; int newConstant = constant * m.getter;
pc.setConstant(new info.sigterm.deob.pool.Integer(pc.getConstant().getPool(), newConstant)); pc.setConstant(new info.sigterm.deob.pool.Integer(newConstant));
++replaced; ++replaced;
} }
} }

View File

@@ -14,22 +14,22 @@ public class Class extends PoolEntry
public Class(ConstantPool pool) throws IOException public Class(ConstantPool pool) throws IOException
{ {
super(pool, ConstantType.CLASS); super(ConstantType.CLASS);
DataInputStream is = pool.getClassFile().getStream(); DataInputStream is = pool.getClassFile().getStream();
index = is.readUnsignedShort(); index = is.readUnsignedShort();
} }
@Override @Override
public void resolve() public void resolve(ConstantPool pool)
{ {
name = this.getPool().getUTF8(index); name = pool.getUTF8(index);
} }
@Override @Override
public void prime() public void prime(ConstantPool pool)
{ {
index = this.getPool().makeUTF8(name); index = pool.makeUTF8(name);
} }
@Override @Override

View File

@@ -13,16 +13,16 @@ public class Double extends PoolEntry
public Double(ConstantPool pool) throws IOException public Double(ConstantPool pool) throws IOException
{ {
super(pool, ConstantType.DOUBLE); super(ConstantType.DOUBLE);
DataInputStream is = pool.getClassFile().getStream(); DataInputStream is = pool.getClassFile().getStream();
value = is.readDouble(); value = is.readDouble();
} }
public Double(ConstantPool pool, double d) public Double(double d)
{ {
super(pool, ConstantType.DOUBLE); super(ConstantType.DOUBLE);
value = d; value = d;
} }

View File

@@ -14,7 +14,7 @@ public class Field extends PoolEntry
public Field(ConstantPool pool) throws IOException public Field(ConstantPool pool) throws IOException
{ {
super(pool, ConstantType.FIELDREF); super(ConstantType.FIELDREF);
DataInputStream is = pool.getClassFile().getStream(); DataInputStream is = pool.getClassFile().getStream();
@@ -23,17 +23,17 @@ public class Field extends PoolEntry
} }
@Override @Override
public void resolve() public void resolve(ConstantPool pool)
{ {
clazz = this.getPool().getClass(classIndex); clazz = pool.getClass(classIndex);
nat = this.getPool().getNameAndType(natIndex); nat = pool.getNameAndType(natIndex);
} }
@Override @Override
public void prime() public void prime(ConstantPool pool)
{ {
classIndex = this.getPool().make(clazz); classIndex = pool.make(clazz);
natIndex = this.getPool().make(nat); natIndex = pool.make(nat);
} }
@Override @Override

View File

@@ -13,16 +13,16 @@ public class Float extends PoolEntry
public Float(ConstantPool pool) throws IOException public Float(ConstantPool pool) throws IOException
{ {
super(pool, ConstantType.FLOAT); super(ConstantType.FLOAT);
DataInputStream is = pool.getClassFile().getStream(); DataInputStream is = pool.getClassFile().getStream();
value = is.readFloat(); value = is.readFloat();
} }
public Float(ConstantPool pool, float f) public Float(float f)
{ {
super(pool, ConstantType.FLOAT); super(ConstantType.FLOAT);
value = f; value = f;
} }

View File

@@ -13,16 +13,16 @@ public class Integer extends PoolEntry
public Integer(ConstantPool pool) throws IOException public Integer(ConstantPool pool) throws IOException
{ {
super(pool, ConstantType.INTEGER); super(ConstantType.INTEGER);
DataInputStream is = pool.getClassFile().getStream(); DataInputStream is = pool.getClassFile().getStream();
value = is.readInt(); value = is.readInt();
} }
public Integer(ConstantPool pool, int i) public Integer(int i)
{ {
super(pool, ConstantType.INTEGER); super(ConstantType.INTEGER);
value = i; value = i;
} }

View File

@@ -12,9 +12,9 @@ public class InterfaceMethod extends PoolEntry
private Class clazz; private Class clazz;
private NameAndType nat; private NameAndType nat;
public InterfaceMethod(ConstantPool pool, Class clazz, NameAndType nat) public InterfaceMethod(Class clazz, NameAndType nat)
{ {
super(pool, ConstantType.INTERFACE_METHOD_REF); super(ConstantType.INTERFACE_METHOD_REF);
this.clazz = clazz; this.clazz = clazz;
this.nat = nat; this.nat = nat;
@@ -22,7 +22,7 @@ public class InterfaceMethod extends PoolEntry
public InterfaceMethod(ConstantPool pool) throws IOException public InterfaceMethod(ConstantPool pool) throws IOException
{ {
super(pool, ConstantType.INTERFACE_METHOD_REF); super(ConstantType.INTERFACE_METHOD_REF);
DataInputStream is = pool.getClassFile().getStream(); DataInputStream is = pool.getClassFile().getStream();
@@ -31,17 +31,17 @@ public class InterfaceMethod extends PoolEntry
} }
@Override @Override
public void resolve() public void resolve(ConstantPool pool)
{ {
clazz = this.getPool().getClass(classIndex); clazz = pool.getClass(classIndex);
nat = this.getPool().getNameAndType(natIndex); nat = pool.getNameAndType(natIndex);
} }
@Override @Override
public void prime() public void prime(ConstantPool pool)
{ {
classIndex = this.getPool().make(clazz); classIndex = pool.make(clazz);
natIndex = this.getPool().make(nat); natIndex = pool.make(nat);
} }
@Override @Override

View File

@@ -13,16 +13,16 @@ public class Long extends PoolEntry
public Long(ConstantPool pool) throws IOException public Long(ConstantPool pool) throws IOException
{ {
super(pool, ConstantType.LONG); super(ConstantType.LONG);
DataInputStream is = pool.getClassFile().getStream(); DataInputStream is = pool.getClassFile().getStream();
value = is.readLong(); value = is.readLong();
} }
public Long(ConstantPool pool, long l) public Long(long l)
{ {
super(pool, ConstantType.LONG); super(ConstantType.LONG);
value = l; value = l;
} }

View File

@@ -12,9 +12,9 @@ public class Method extends PoolEntry
private Class clazz; private Class clazz;
private NameAndType nat; private NameAndType nat;
public Method(ConstantPool pool, Class clazz, NameAndType nat) public Method(Class clazz, NameAndType nat)
{ {
super(pool, ConstantType.METHODREF); super(ConstantType.METHODREF);
this.clazz = clazz; this.clazz = clazz;
this.nat = nat; this.nat = nat;
@@ -22,7 +22,7 @@ public class Method extends PoolEntry
public Method(ConstantPool pool) throws IOException public Method(ConstantPool pool) throws IOException
{ {
super(pool, ConstantType.METHODREF); super(ConstantType.METHODREF);
DataInputStream is = pool.getClassFile().getStream(); DataInputStream is = pool.getClassFile().getStream();
@@ -31,17 +31,17 @@ public class Method extends PoolEntry
} }
@Override @Override
public void resolve() public void resolve(ConstantPool pool)
{ {
clazz = this.getPool().getClass(classIndex); clazz = pool.getClass(classIndex);
nat = this.getPool().getNameAndType(natIndex); nat = pool.getNameAndType(natIndex);
} }
@Override @Override
public void prime() public void prime(ConstantPool pool)
{ {
classIndex = this.getPool().make(clazz); classIndex = pool.make(clazz);
natIndex = this.getPool().make(nat); natIndex = pool.make(nat);
} }
@Override @Override

View File

@@ -20,7 +20,7 @@ public class NameAndType extends PoolEntry
public NameAndType(ConstantPool pool) throws IOException public NameAndType(ConstantPool pool) throws IOException
{ {
super(pool, ConstantType.NAME_AND_TYPE); super(ConstantType.NAME_AND_TYPE);
DataInputStream is = pool.getClassFile().getStream(); DataInputStream is = pool.getClassFile().getStream();
@@ -28,28 +28,20 @@ public class NameAndType extends PoolEntry
descriptorIndex = is.readUnsignedShort(); descriptorIndex = is.readUnsignedShort();
} }
public NameAndType(ConstantPool pool, java.lang.String name, Signature sig) public NameAndType(java.lang.String name, Signature sig)
{ {
super(pool, ConstantType.NAME_AND_TYPE); super(ConstantType.NAME_AND_TYPE);
this.name = name; this.name = name;
this.signature = sig; this.signature = sig;
} }
public NameAndType(java.lang.String name, Signature type)
{
super(null, ConstantType.NAME_AND_TYPE);
this.name = name;
signature = type;
}
@Override @Override
public void resolve() public void resolve(ConstantPool pool)
{ {
name = this.getPool().getUTF8(nameIndex); name = pool.getUTF8(nameIndex);
java.lang.String sig = this.getPool().getUTF8(descriptorIndex); java.lang.String sig = pool.getUTF8(descriptorIndex);
if (sig.startsWith("(")) if (sig.startsWith("("))
signature = new Signature(sig); signature = new Signature(sig);
else else
@@ -57,13 +49,13 @@ public class NameAndType extends PoolEntry
} }
@Override @Override
public void prime() public void prime(ConstantPool pool)
{ {
nameIndex = this.getPool().makeUTF8(name); nameIndex = pool.makeUTF8(name);
if (signature != null) if (signature != null)
descriptorIndex = this.getPool().makeUTF8(signature.toString()); descriptorIndex = pool.makeUTF8(signature.toString());
else else
descriptorIndex = this.getPool().makeUTF8(type.toString()); descriptorIndex = pool.makeUTF8(type.toString());
} }
@Override @Override

View File

@@ -8,23 +8,21 @@ import info.sigterm.deob.execution.Type;
public abstract class PoolEntry public abstract class PoolEntry
{ {
public ConstantPool pool;
private ConstantType type; private ConstantType type;
public int id; public int id;
protected PoolEntry(ConstantPool pool, ConstantType type) protected PoolEntry(ConstantType type)
{ {
this.pool = pool;
this.type = type; this.type = type;
} }
// read objects from indexes // read objects from indexes
public void resolve() public void resolve(ConstantPool pool)
{ {
} }
// make objects and prime indexes // make objects and prime indexes
public void prime() public void prime(ConstantPool pool)
{ {
} }
@@ -32,11 +30,6 @@ public abstract class PoolEntry
public abstract boolean equals(Object other); public abstract boolean equals(Object other);
public abstract void write(DataOutputStream out) throws IOException; public abstract void write(DataOutputStream out) throws IOException;
public ConstantPool getPool()
{
return pool;
}
public ConstantType getType() public ConstantType getType()
{ {

View File

@@ -14,30 +14,30 @@ public class String extends PoolEntry
public String(ConstantPool pool) throws IOException public String(ConstantPool pool) throws IOException
{ {
super(pool, ConstantType.STRING); super(ConstantType.STRING);
DataInputStream is = pool.getClassFile().getStream(); DataInputStream is = pool.getClassFile().getStream();
stringIndex = is.readUnsignedShort(); stringIndex = is.readUnsignedShort();
} }
public String(ConstantPool pool, java.lang.String str) public String(java.lang.String str)
{ {
super(pool, ConstantType.STRING); super(ConstantType.STRING);
string = str; string = str;
} }
@Override @Override
public void resolve() public void resolve(ConstantPool pool)
{ {
string = this.getPool().getUTF8(stringIndex); string = pool.getUTF8(stringIndex);
} }
@Override @Override
public void prime() public void prime(ConstantPool pool)
{ {
stringIndex = this.getPool().makeUTF8(string); stringIndex = pool.makeUTF8(string);
} }
@Override @Override

View File

@@ -12,7 +12,7 @@ public class UTF8 extends PoolEntry
public UTF8(ConstantPool pool) throws IOException public UTF8(ConstantPool pool) throws IOException
{ {
super(pool, ConstantType.UTF8); super(ConstantType.UTF8);
DataInputStream ios = pool.getClassFile().getStream(); DataInputStream ios = pool.getClassFile().getStream();
string = ios.readUTF(); string = ios.readUTF();
@@ -20,7 +20,7 @@ public class UTF8 extends PoolEntry
public UTF8(java.lang.String value) public UTF8(java.lang.String value)
{ {
super(null, ConstantType.UTF8); super(ConstantType.UTF8);
string = value; string = value;
} }