Class writing, call graph, eclipse project

This commit is contained in:
Adam
2015-04-25 12:47:06 -04:00
parent 4dc6bfc949
commit a9f953b46a
72 changed files with 903 additions and 18 deletions

View File

@@ -6,6 +6,7 @@ import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.execution.Frame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class ALoad extends Instruction
@@ -20,6 +21,13 @@ public class ALoad extends Instruction
index = is.readByte();
length += 1;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeByte(index);
}
@Override
public void execute(Frame frame)

View File

@@ -10,6 +10,7 @@ import info.sigterm.deob.execution.Frame;
import info.sigterm.deob.pool.Class;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class ANewArray extends Instruction
@@ -24,6 +25,13 @@ public class ANewArray extends Instruction
index = is.readUnsignedShort();
length += 2;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeShort(index);
}
@Override
public void execute(Frame frame)

View File

@@ -6,6 +6,7 @@ import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.execution.Frame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class AStore extends Instruction
@@ -20,6 +21,13 @@ public class AStore extends Instruction
index = is.readByte();
length += 1;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeByte(index);
}
@Override
public void execute(Frame frame)

View File

@@ -6,6 +6,7 @@ import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.execution.Frame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class BiPush extends Instruction
@@ -20,6 +21,13 @@ public class BiPush extends Instruction
b = is.readByte();
length += 1;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeByte(b);
}
@Override
public void execute(Frame frame)

View File

@@ -10,6 +10,7 @@ import info.sigterm.deob.execution.ObjectInstance;
import info.sigterm.deob.pool.Class;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class CheckCast extends Instruction
@@ -24,6 +25,13 @@ public class CheckCast extends Instruction
index = is.readUnsignedShort();
length += 2;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeShort(index);
}
@Override
public void execute(Frame e)

View File

@@ -6,6 +6,7 @@ import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.execution.Frame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class DLoad extends Instruction
@@ -20,6 +21,13 @@ public class DLoad extends Instruction
index = is.readByte();
length += 1;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeByte(index);
}
@Override
public void execute(Frame frame)

View File

@@ -6,6 +6,7 @@ import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.execution.Frame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class DStore extends Instruction
@@ -20,6 +21,13 @@ public class DStore extends Instruction
index = is.readByte();
length += 1;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeByte(index);
}
@Override
public void execute(Frame frame)

View File

@@ -6,6 +6,7 @@ import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.execution.Frame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class FLoad extends Instruction
@@ -20,6 +21,13 @@ public class FLoad extends Instruction
index = is.readByte();
length += 1;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeByte(index);
}
@Override
public void execute(Frame frame)

View File

@@ -6,6 +6,7 @@ import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.execution.Frame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class FStore extends Instruction
@@ -20,6 +21,13 @@ public class FStore extends Instruction
index = is.readByte();
length += 1;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeByte(index);
}
@Override
public void execute(Frame frame)

View File

@@ -12,6 +12,7 @@ import info.sigterm.deob.pool.Field;
import info.sigterm.deob.pool.NameAndType;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class GetField extends Instruction
@@ -26,6 +27,13 @@ public class GetField extends Instruction
index = is.readUnsignedShort();
length += 2;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeShort(index);
}
@Override
public void execute(Frame frame)

View File

@@ -13,6 +13,7 @@ import info.sigterm.deob.pool.Field;
import info.sigterm.deob.pool.NameAndType;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class GetStatic extends Instruction
@@ -27,6 +28,13 @@ public class GetStatic extends Instruction
index = is.readUnsignedShort();
length += 2;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeShort(index);
}
@Override
public void execute(Frame frame)

View File

@@ -6,6 +6,7 @@ import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.execution.Frame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class Goto extends Instruction
@@ -20,6 +21,13 @@ public class Goto extends Instruction
offset = is.readShort();
length += 2;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeShort(offset);
}
@Override
public void buildJumpGraph()

View File

@@ -6,6 +6,7 @@ import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.execution.Frame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class GotoW extends Instruction
@@ -20,6 +21,13 @@ public class GotoW extends Instruction
offset = is.readInt();
length += 4;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeInt(offset);
}
@Override
public void buildJumpGraph()

View File

@@ -6,6 +6,7 @@ import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.execution.Frame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class IInc extends Instruction
@@ -22,6 +23,14 @@ public class IInc extends Instruction
inc = is.readByte();
length += 2;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeByte(index);
out.writeByte(inc);
}
@Override
public void execute(Frame frame)

View File

@@ -6,6 +6,7 @@ import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.execution.Frame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class ILoad extends Instruction
@@ -20,6 +21,13 @@ public class ILoad extends Instruction
index = is.readByte();
length += 1;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeByte(index);
}
@Override
public void execute(Frame frame)

View File

@@ -6,6 +6,7 @@ import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.execution.Frame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class IStore extends Instruction
@@ -20,6 +21,13 @@ public class IStore extends Instruction
index = is.readByte();
length += 1;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeByte(index);
}
@Override
public void execute(Frame frame)

View File

@@ -7,6 +7,7 @@ import info.sigterm.deob.execution.Frame;
import info.sigterm.deob.execution.Path;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class If extends Instruction
@@ -21,6 +22,13 @@ public class If extends Instruction
offset = is.readShort();
length += 2;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeShort(offset);
}
@Override
public void buildJumpGraph()

View File

@@ -7,6 +7,7 @@ import info.sigterm.deob.execution.Frame;
import info.sigterm.deob.execution.Path;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class If0 extends Instruction
@@ -21,6 +22,13 @@ public class If0 extends Instruction
offset = is.readShort();
length += 2;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeShort(offset);
}
@Override
public void buildJumpGraph()

View File

@@ -10,6 +10,7 @@ import info.sigterm.deob.execution.ObjectInstanceBase;
import info.sigterm.deob.pool.Class;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class InstanceOf extends Instruction
@@ -24,6 +25,13 @@ public class InstanceOf extends Instruction
index = is.readUnsignedShort();
length += 2;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeShort(index);
}
@Override
public void execute(Frame e)

View File

@@ -10,8 +10,10 @@ import info.sigterm.deob.execution.ClassInstance;
import info.sigterm.deob.execution.Frame;
import info.sigterm.deob.execution.ObjectInstance;
import info.sigterm.deob.pool.InterfaceMethod;
import info.sigterm.deob.pool.NameAndType;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class InvokeInterface extends Instruction
@@ -29,6 +31,36 @@ public class InvokeInterface extends Instruction
is.skip(1);
length += 4;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeShort(index);
out.writeByte(count);
out.writeByte(0);
}
@Override
public void buildCallGraph()
{
ClassFile thisClass = this.getInstructions().getCode().getAttributes().getClassFile();
ConstantPool pool = thisClass.getPool();
InterfaceMethod method = (InterfaceMethod) pool.getEntry(index);
info.sigterm.deob.pool.Class clazz = method.getClassEntry();
NameAndType nat = method.getNameAndType();
info.sigterm.deob.Method thisMethod = this.getInstructions().getCode().getAttributes().getMethod();
ClassFile otherClass = this.getInstructions().getCode().getAttributes().getClassFile().getGroup().findClass(clazz.getName());
if (otherClass == null)
return;
info.sigterm.deob.Method other = otherClass.findMethod(nat);
thisMethod.addCallTo(this, other);
}
@Override
public void execute(Frame e)

View File

@@ -9,9 +9,11 @@ import info.sigterm.deob.execution.ClassInstance;
import info.sigterm.deob.execution.Frame;
import info.sigterm.deob.execution.ObjectInstance;
import info.sigterm.deob.pool.Method;
import info.sigterm.deob.pool.NameAndType;
import info.sigterm.deob.pool.PoolEntry;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class InvokeSpecial extends Instruction
@@ -26,6 +28,35 @@ public class InvokeSpecial extends Instruction
index = is.readUnsignedShort();
length += 2;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeShort(index);
}
@Override
public void buildCallGraph()
{
ClassFile thisClass = this.getInstructions().getCode().getAttributes().getClassFile();
ConstantPool pool = thisClass.getPool();
Method method = (Method) pool.getEntry(index);
info.sigterm.deob.pool.Class clazz = method.getClassEntry();
NameAndType nat = method.getNameAndType();
info.sigterm.deob.Method thisMethod = this.getInstructions().getCode().getAttributes().getMethod();
ClassFile otherClass = this.getInstructions().getCode().getAttributes().getClassFile().getGroup().findClass(clazz.getName());
if (otherClass == null)
return;
info.sigterm.deob.Method other = otherClass.findMethod(nat);
thisMethod.addCallTo(this, other);
}
@Override
public void execute(Frame e)

View File

@@ -7,8 +7,10 @@ import info.sigterm.deob.attributes.code.InstructionType;
import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.execution.Frame;
import info.sigterm.deob.pool.Method;
import info.sigterm.deob.pool.NameAndType;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class InvokeStatic extends Instruction
@@ -23,6 +25,35 @@ public class InvokeStatic extends Instruction
index = is.readUnsignedShort();
length += 2;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeShort(index);
}
@Override
public void buildCallGraph()
{
ClassFile thisClass = this.getInstructions().getCode().getAttributes().getClassFile();
ConstantPool pool = thisClass.getPool();
Method method = (Method) pool.getEntry(index);
info.sigterm.deob.pool.Class clazz = method.getClassEntry();
NameAndType nat = method.getNameAndType();
info.sigterm.deob.Method thisMethod = this.getInstructions().getCode().getAttributes().getMethod();
ClassFile otherClass = this.getInstructions().getCode().getAttributes().getClassFile().getGroup().findClass(clazz.getName());
if (otherClass == null)
return;
info.sigterm.deob.Method other = otherClass.findMethod(nat);
thisMethod.addCallTo(this, other);
}
@Override
public void execute(Frame e)

View File

@@ -9,8 +9,10 @@ import info.sigterm.deob.execution.ClassInstance;
import info.sigterm.deob.execution.Frame;
import info.sigterm.deob.execution.ObjectInstance;
import info.sigterm.deob.pool.Method;
import info.sigterm.deob.pool.NameAndType;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class InvokeVirtual extends Instruction
@@ -25,6 +27,36 @@ public class InvokeVirtual extends Instruction
index = is.readUnsignedShort();
length += 2;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeShort(index);
}
@Override
public void buildCallGraph()
{
ClassFile thisClass = this.getInstructions().getCode().getAttributes().getClassFile();
ConstantPool pool = thisClass.getPool();
Method method = (Method) pool.getEntry(index);
info.sigterm.deob.pool.Class clazz = method.getClassEntry();
NameAndType nat = method.getNameAndType();
info.sigterm.deob.Method thisMethod = this.getInstructions().getCode().getAttributes().getMethod();
ClassFile otherClass = this.getInstructions().getCode().getAttributes().getClassFile().getGroup().findClass(clazz.getName());
if (otherClass == null)
return;
info.sigterm.deob.Method other = otherClass.findMethod(nat);
if (other == null)
return;
thisMethod.addCallTo(this, other);
}
@Override
public void execute(Frame e)

View File

@@ -8,6 +8,7 @@ import info.sigterm.deob.execution.Frame;
import info.sigterm.deob.pool.PoolEntry;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class LDC extends Instruction
@@ -22,6 +23,13 @@ public class LDC extends Instruction
index = is.readByte();
length += 1;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeByte(index);
}
@Override
public void execute(Frame frame)

View File

@@ -8,6 +8,7 @@ import info.sigterm.deob.execution.Frame;
import info.sigterm.deob.pool.PoolEntry;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class LDC2_W extends Instruction
@@ -22,6 +23,13 @@ public class LDC2_W extends Instruction
index = is.readUnsignedShort();
length += 2;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeShort(index);
}
@Override
public void execute(Frame frame)

View File

@@ -8,6 +8,7 @@ import info.sigterm.deob.execution.Frame;
import info.sigterm.deob.pool.PoolEntry;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class LDC_W extends Instruction
@@ -22,6 +23,13 @@ public class LDC_W extends Instruction
index = is.readUnsignedShort();
length += 2;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeShort(index);
}
@Override
public void execute(Frame frame)

View File

@@ -6,6 +6,7 @@ import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.execution.Frame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class LLoad extends Instruction
@@ -20,6 +21,13 @@ public class LLoad extends Instruction
index = is.readByte();
length += 1;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeByte(index);
}
@Override
public void execute(Frame frame)

View File

@@ -6,6 +6,7 @@ import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.execution.Frame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class LStore extends Instruction
@@ -20,6 +21,13 @@ public class LStore extends Instruction
index = is.readByte();
length += 1;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeByte(index);
}
@Override
public void execute(Frame frame)

View File

@@ -7,6 +7,7 @@ import info.sigterm.deob.execution.Frame;
import info.sigterm.deob.execution.Path;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class LookupSwitch extends Instruction
@@ -40,6 +41,25 @@ public class LookupSwitch extends Instruction
length += tableSkip + 8 + (count * 8);
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
int tableSkip = 4 - (pc + 1) % 4;
if (tableSkip == 4) tableSkip = 0;
if (tableSkip > 0) out.write(new byte[tableSkip]);
out.writeInt(def);
out.writeInt(count);
for (int i = 0; i < count; ++i)
{
out.writeInt(match[i]);
out.writeInt(branch[i]);
}
}
@Override
public void buildJumpGraph()

View File

@@ -9,6 +9,7 @@ import info.sigterm.deob.execution.Stack;
import info.sigterm.deob.pool.Class;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class MultiANewArray extends Instruction
@@ -26,6 +27,14 @@ public class MultiANewArray extends Instruction
length += 3;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeShort(index);
out.writeByte(dimensions);
}
@Override
public void execute(Frame e)
{

View File

@@ -10,6 +10,7 @@ import info.sigterm.deob.execution.ObjectInstance;
import info.sigterm.deob.pool.Class;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class New extends Instruction
@@ -24,6 +25,13 @@ public class New extends Instruction
index = is.readUnsignedShort();
length += 2;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeShort(index);
}
@Override
public void execute(Frame e)

View File

@@ -6,6 +6,7 @@ import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.execution.Frame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class NewArray extends Instruction
@@ -20,6 +21,13 @@ public class NewArray extends Instruction
this.type = is.readUnsignedByte();
length += 1;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeByte(type);
}
@Override
public void execute(Frame e)

View File

@@ -12,6 +12,7 @@ import info.sigterm.deob.pool.Field;
import info.sigterm.deob.pool.NameAndType;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class PutField extends Instruction
@@ -26,6 +27,13 @@ public class PutField extends Instruction
index = is.readUnsignedShort();
length += 2;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeShort(index);
}
@Override
public void execute(Frame e)

View File

@@ -13,6 +13,7 @@ import info.sigterm.deob.pool.Field;
import info.sigterm.deob.pool.NameAndType;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class PutStatic extends Instruction
@@ -27,6 +28,13 @@ public class PutStatic extends Instruction
index = is.readUnsignedShort();
length += 2;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeShort(index);
}
@Override
public void execute(Frame e)

View File

@@ -6,6 +6,7 @@ import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.execution.Frame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class SiPush extends Instruction
@@ -20,6 +21,13 @@ public class SiPush extends Instruction
s = is.readShort();
length += 2;
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeShort(s);
}
@Override
public void execute(Frame frame)

View File

@@ -7,6 +7,7 @@ import info.sigterm.deob.execution.Frame;
import info.sigterm.deob.execution.Path;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class TableSwitch extends Instruction
@@ -38,6 +39,23 @@ public class TableSwitch extends Instruction
length += tableSkip + 12 + (count * 4);
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
int tableSkip = 4 - (pc + 1) % 4;
if (tableSkip == 4) tableSkip = 0;
if (tableSkip > 0) out.write(new byte[tableSkip]);
out.writeInt(def);
out.writeInt(low);
out.writeInt(high);
for (int i = 0; i < high - low + 1; ++i)
out.writeInt(jumps[i]);
}
@Override
public void buildJumpGraph()

View File

@@ -6,6 +6,7 @@ import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.execution.Frame;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class Wide extends Instruction
@@ -33,6 +34,22 @@ public class Wide extends Instruction
length += 2;
}
}
@Override
public void write(DataOutputStream out, int pc) throws IOException
{
super.write(out, pc);
out.writeByte(opcode);
out.writeShort(index);
InstructionType optype = InstructionType.findInstructionFromCode(opcode);
assert optype != null;
if (optype == InstructionType.IINC)
{
out.writeShort(value);
}
}
@Override
public void execute(Frame e)