@Nonnull private BuilderInstruction21c newBuilderInstruction21c(@Nonnull Instruction21c instruction) { return new BuilderInstruction21c( instruction.getOpcode(), instruction.getRegisterA(), convertReference(instruction.getReference())); }
@Override public Op create(MethodLocation location, TIntObjectMap<MethodLocation> addressToLocation, VirtualMachine vm) { MethodLocation child = Utils.getNextLocation(location, addressToLocation); Instruction21c instr = (Instruction21c) location.getInstruction(); int destRegister = instr.getRegisterA(); TypeReference typeRef = (TypeReference) instr.getReference(); String className = typeRef.getType(); VirtualClass virtualClass = vm.getClassManager().getVirtualClass(className); return new NewInstanceOp(location, child, destRegister, virtualClass, vm); }
@Override public void jimplify(DexBody body) { int dest = ((OneRegisterInstruction) instruction).getRegisterA(); String s; if (instruction instanceof Instruction21c) { Instruction21c i = (Instruction21c) instruction; s = ((StringReference) (i.getReference())).getString(); } else if (instruction instanceof Instruction31c) { Instruction31c i = (Instruction31c) instruction; s = ((StringReference) (i.getReference())).getString(); } else { throw new IllegalArgumentException("Expected Instruction21c or Instruction31c but got neither."); } StringConstant sc = StringConstant.v(s); AssignStmt assign = Jimple.v().newAssignStmt(body.getRegisterLocal(dest), sc); setUnit(assign); addTags(assign); body.add(assign); if (IDalvikTyper.ENABLE_DVKTYPER) { DalvikTyper.v().setType(assign.getLeftOpBox(), sc.getType(), false); } }
public void write(@Nonnull Instruction21c instruction) { try { writer.write(instruction.getOpcode().value); writer.write(instruction.getRegisterA()); writer.writeUshort(getReferenceIndex(instruction)); } catch (IOException ex) { throw new RuntimeException(ex); } }
Assert.assertEquals(Opcode.SGET_OBJECT, instruction.getOpcode()); FieldReference field = (FieldReference)instruction.getReference(); Assert.assertEquals(classDef.getType(), field.getDefiningClass()); Assert.assertEquals("someField", field.getName()); Assert.assertEquals(Opcode.SGET_OBJECT, instruction.getOpcode()); field = (FieldReference)instruction.getReference(); Assert.assertEquals(classDef.getType(), field.getDefiningClass()); Assert.assertEquals("V", field.getName()); Assert.assertEquals(Opcode.SGET_OBJECT, instruction.getOpcode()); field = (FieldReference)instruction.getReference(); Assert.assertEquals(classDef.getType(), field.getDefiningClass()); Assert.assertEquals("I", field.getName());
/** * Return the source register for this instruction. */ private int sourceRegister() { // I hate smali's API .. if (instruction instanceof Instruction23x) { return ((Instruction23x) instruction).getRegisterA(); } else if (instruction instanceof Instruction22c) { return ((Instruction22c) instruction).getRegisterA(); } else if (instruction instanceof Instruction21c) { return ((Instruction21c) instruction).getRegisterA(); } else { throw new RuntimeException("Instruction is not a instance, array or static op"); } }
@Override public Op create(MethodLocation location, TIntObjectMap<MethodLocation> addressToLocation, VirtualMachine vm) { MethodLocation child = Utils.getNextLocation(location, addressToLocation); Instruction21c instr = (Instruction21c) location.getInstruction(); int targetRegister = instr.getRegisterA(); TypeReference reference = (TypeReference) instr.getReference(); VirtualType referenceType = vm.getClassManager().getVirtualType(reference); return new CheckCastOp(location, child, targetRegister, referenceType, vm.getClassManager(), vm.getExceptionFactory()); }
FieldReference fieldRef = null; try { fieldRef = (FieldReference)ins.getReference(); } catch (InvalidItemIndex ex) {
public void write(@Nonnull Instruction21c instruction) { try { writer.write(getOpcodeValue(instruction.getOpcode())); writer.write(instruction.getRegisterA()); writer.writeUshort(getReferenceIndex(instruction)); } catch (IOException ex) { throw new RuntimeException(ex); } }
public int getRegisterA() { return instruction.getRegisterA(); } }
public static ImmutableInstruction21c of(Instruction21c instruction) { if (instruction instanceof ImmutableInstruction21c) { return (ImmutableInstruction21c)instruction; } return new ImmutableInstruction21c( instruction.getOpcode(), instruction.getRegisterA(), instruction.getReference()); }
@Override public Op create(MethodLocation location, TIntObjectMap<MethodLocation> addressToLocation, VirtualMachine vm) { MethodLocation child = Utils.getNextLocation(location, addressToLocation); Instruction21c instr = (Instruction21c) location.getInstruction(); int destRegister = instr.getRegisterA(); FieldReference fieldReference = (FieldReference) instr.getReference(); VirtualClass fieldClass = vm.getClassManager().getVirtualClass(fieldReference.getDefiningClass()); VirtualField actualField = fieldClass.getField(fieldReference.getName()); return new SGetOp(location, child, destRegister, fieldReference, actualField, vm); }
FieldReference fieldRef = null; try { fieldRef = (FieldReference)ins.getReference(); } catch (InvalidItemIndex ex) {
public void write(@Nonnull Instruction21c instruction) { try { writer.write(getOpcodeValue(instruction.getOpcode())); writer.write(instruction.getRegisterA()); writer.writeUshort(getReferenceIndex(instruction)); } catch (IOException ex) { throw new RuntimeException(ex); } }
public int getRegisterA() { return instruction.getRegisterA(); } }
public static ImmutableInstruction21c of(Instruction21c instruction) { if (instruction instanceof ImmutableInstruction21c) { return (ImmutableInstruction21c)instruction; } return new ImmutableInstruction21c( instruction.getOpcode(), instruction.getRegisterA(), instruction.getReference()); }
@Override public Op create(MethodLocation location, TIntObjectMap<MethodLocation> addressToLocation, VirtualMachine vm) { MethodLocation child = Utils.getNextLocation(location, addressToLocation); Instruction21c instr = (Instruction21c) location.getInstruction(); int destRegister = instr.getRegisterA(); FieldReference fieldReference = (FieldReference) instr.getReference(); VirtualClass fieldClass = vm.getClassManager().getVirtualClass(fieldReference.getDefiningClass()); VirtualField actualField = fieldClass.getField(fieldReference.getName()); return new SPutOp(location, child, destRegister, fieldReference, actualField, vm); }
FieldReference fieldRef = null; try { fieldRef = (FieldReference)ins.getReference(); } catch (InvalidItemIndex ex) {
public int getRegisterA() { return instruction.getRegisterA(); } }
public static ImmutableInstruction21c of(Instruction21c instruction) { if (instruction instanceof ImmutableInstruction21c) { return (ImmutableInstruction21c)instruction; } return new ImmutableInstruction21c( instruction.getOpcode(), instruction.getRegisterA(), instruction.getReference()); }