public int getInstructionAddress(@Nonnull AnalyzedInstruction instruction) { return analyzedInstructions.keyAt(instruction.instructionIndex); }
@Bench public void timeLookupSparseArray() { Object value = null; for (int i = 0; i < data.length; i++) { int key = mySparse.keyAt(i); value = mySparse.get(key); } value.toString(); }
private int getNextFieldOffset() { SparseArray<FieldReference> instanceFields = getInstanceFields(); if (instanceFields.size() == 0) { return classPath.isArt() ? 0 : 8; } int lastItemIndex = instanceFields.size()-1; int fieldOffset = instanceFields.keyAt(lastItemIndex); FieldReference lastField = instanceFields.valueAt(lastItemIndex); if (classPath.isArt()) { return fieldOffset + getTypeSize(lastField.getType().charAt(0)); } else { switch (lastField.getType().charAt(0)) { case 'J': case 'D': return fieldOffset + 8; default: return fieldOffset + 4; } } }
int lastOffset = 0; for (int i=0; i<superFields.size(); i++) { int offset = superFields.keyAt(i); field = superFields.valueAt(i); linkedFields.put(offset, field);
public int getInstructionAddress(@Nonnull AnalyzedInstruction instruction) { return analyzedInstructions.keyAt(instruction.instructionIndex); }
public int getInstructionAddress(@Nonnull AnalyzedInstruction instruction) { return analyzedInstructions.keyAt(instruction.instructionIndex); }
private int getNextFieldOffset() { SparseArray<FieldReference> instanceFields = getInstanceFields(); if (instanceFields.size() == 0) { return 8; } int lastItemIndex = instanceFields.size()-1; int fieldOffset = instanceFields.keyAt(lastItemIndex); FieldReference lastField = instanceFields.valueAt(lastItemIndex); switch (lastField.getType().charAt(0)) { case 'J': case 'D': return fieldOffset + 8; default: return fieldOffset + 4; } }
@Override public void run() { if (help || inputList == null || inputList.isEmpty()) { usage(); return; } if (inputList.size() > 1) { System.err.println("Too many files specified"); usage(); return; } String input = inputList.get(0); loadDexFile(input); BaksmaliOptions options = getOptions(); try { for (ClassDef classDef: dexFile.getClasses()) { ClassProto classProto = (ClassProto) options.classPath.getClass(classDef); SparseArray<FieldReference> fields = classProto.getInstanceFields(); String className = "Class " + classDef.getType() + " : " + fields.size() + " instance fields\n"; System.out.write(className.getBytes()); for (int i=0;i<fields.size();i++) { String field = fields.keyAt(i) + ":" + fields.valueAt(i).getType() + " " + fields.valueAt(i).getName() + "\n"; System.out.write(field.getBytes()); } System.out.write("\n".getBytes()); } System.out.close(); } catch (IOException ex) { throw new RuntimeException(ex); } }
@Override public void run() { if (help || inputList == null || inputList.isEmpty()) { usage(); return; } if (inputList.size() > 1) { System.err.println("Too many files specified"); usage(); return; } String input = inputList.get(0); loadDexFile(input); BaksmaliOptions options = getOptions(); try { for (ClassDef classDef: dexFile.getClasses()) { ClassProto classProto = (ClassProto) options.classPath.getClass(classDef); SparseArray<FieldReference> fields = classProto.getInstanceFields(); String className = "Class " + classDef.getType() + " : " + fields.size() + " instance fields\n"; System.out.write(className.getBytes()); for (int i=0;i<fields.size();i++) { String field = fields.keyAt(i) + ":" + fields.valueAt(i).getType() + " " + fields.valueAt(i).getName() + "\n"; System.out.write(field.getBytes()); } System.out.write("\n".getBytes()); } System.out.close(); } catch (IOException ex) { throw new RuntimeException(ex); } }
outStream.write(className.getBytes()); for (int i=0;i<fields.size();i++) { String field = fields.keyAt(i) + ":" + fields.valueAt(i).getType() + " " + fields.valueAt(i).getName() + "\n"; outStream.write(field.getBytes());
private int getNextFieldOffset() { SparseArray<FieldReference> instanceFields = getInstanceFields(); if (instanceFields.size() == 0) { return classPath.isArt() ? 0 : 8; } int lastItemIndex = instanceFields.size()-1; int fieldOffset = instanceFields.keyAt(lastItemIndex); FieldReference lastField = instanceFields.valueAt(lastItemIndex); if (classPath.isArt()) { return fieldOffset + getTypeSize(lastField.getType().charAt(0)); } else { switch (lastField.getType().charAt(0)) { case 'J': case 'D': return fieldOffset + 8; default: return fieldOffset + 4; } } }
if (superFields != null && superFieldCount > 0) { for (int i = 0; i < superFieldCount; i++) { instanceFields.append(superFields.keyAt(i), superFields.valueAt(i));
int lastOffset = 0; for (int i=0; i<superFields.size(); i++) { int offset = superFields.keyAt(i); field = superFields.valueAt(i); linkedFields.put(offset, field);