mirror of
https://github.com/revanced/smali.git
synced 2025-05-06 09:24:33 +02:00
Update all the data offset references to use the data buffer
This commit is contained in:
parent
587efc71dd
commit
a1fa38da8d
@ -48,7 +48,7 @@ public class DexBackedAnnotation extends BaseAnnotation {
|
||||
int annotationOffset) {
|
||||
this.dexFile = dexFile;
|
||||
|
||||
DexReader reader = dexFile.getBuffer().readerAt(annotationOffset);
|
||||
DexReader reader = dexFile.getDataBuffer().readerAt(annotationOffset);
|
||||
this.visibility = reader.readUbyte();
|
||||
this.typeIndex = reader.readSmallUleb128();
|
||||
this.elementsOffset = reader.getOffset();
|
||||
@ -60,10 +60,10 @@ public class DexBackedAnnotation extends BaseAnnotation {
|
||||
@Nonnull
|
||||
@Override
|
||||
public Set<? extends DexBackedAnnotationElement> getElements() {
|
||||
DexReader reader = dexFile.getBuffer().readerAt(elementsOffset);
|
||||
DexReader reader = dexFile.getDataBuffer().readerAt(elementsOffset);
|
||||
final int size = reader.readSmallUleb128();
|
||||
|
||||
return new VariableSizeSet<DexBackedAnnotationElement>(dexFile, reader.getOffset(), size) {
|
||||
return new VariableSizeSet<DexBackedAnnotationElement>(dexFile.getDataBuffer(), reader.getOffset(), size) {
|
||||
@Nonnull
|
||||
@Override
|
||||
protected DexBackedAnnotationElement readNextItem(@Nonnull DexReader reader, int index) {
|
||||
|
@ -82,7 +82,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
||||
directMethodCount = 0;
|
||||
virtualMethodCount = 0;
|
||||
} else {
|
||||
DexReader reader = dexFile.getBuffer().readerAt(classDataOffset);
|
||||
DexReader reader = dexFile.getDataBuffer().readerAt(classDataOffset);
|
||||
staticFieldCount = reader.readSmallUleb128();
|
||||
instanceFieldCount = reader.readSmallUleb128();
|
||||
directMethodCount = reader.readSmallUleb128();
|
||||
@ -121,15 +121,16 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<String> getInterfaces() {
|
||||
final int interfacesOffset = dexFile.getBuffer().readSmallUint(classDefOffset + ClassDefItem.INTERFACES_OFFSET);
|
||||
final int interfacesOffset =
|
||||
dexFile.getBuffer().readSmallUint(classDefOffset + ClassDefItem.INTERFACES_OFFSET);
|
||||
if (interfacesOffset > 0) {
|
||||
final int size = dexFile.getBuffer().readSmallUint(interfacesOffset);
|
||||
final int size = dexFile.getDataBuffer().readSmallUint(interfacesOffset);
|
||||
return new AbstractList<String>() {
|
||||
@Override
|
||||
@Nonnull
|
||||
public String get(int index) {
|
||||
return dexFile.getTypeSection().get(
|
||||
dexFile.getBuffer().readUshort(interfacesOffset + 4 + (2*index)));
|
||||
dexFile.getDataBuffer().readUshort(interfacesOffset + 4 + (2*index)));
|
||||
}
|
||||
|
||||
@Override public int size() { return size; }
|
||||
@ -153,7 +154,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
||||
@Nonnull
|
||||
public Iterable<? extends DexBackedField> getStaticFields(final boolean skipDuplicates) {
|
||||
if (staticFieldCount > 0) {
|
||||
DexReader reader = dexFile.getBuffer().readerAt(staticFieldsOffset);
|
||||
DexReader reader = dexFile.getDataBuffer().readerAt(staticFieldsOffset);
|
||||
|
||||
final AnnotationsDirectory annotationsDirectory = getAnnotationsDirectory();
|
||||
final int staticInitialValuesOffset =
|
||||
@ -169,7 +170,8 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
||||
final EncodedArrayItemIterator staticInitialValueIterator =
|
||||
EncodedArrayItemIterator.newOrEmpty(dexFile, staticInitialValuesOffset);
|
||||
|
||||
return new VariableSizeLookaheadIterator<DexBackedField>(dexFile, fieldsStartOffset) {
|
||||
return new VariableSizeLookaheadIterator<DexBackedField>(
|
||||
dexFile.getDataBuffer(), fieldsStartOffset) {
|
||||
private int count;
|
||||
@Nullable private FieldReference previousField;
|
||||
private int previousIndex;
|
||||
@ -216,7 +218,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
||||
@Nonnull
|
||||
public Iterable<? extends DexBackedField> getInstanceFields(final boolean skipDuplicates) {
|
||||
if (instanceFieldCount > 0) {
|
||||
DexReader reader = dexFile.getBuffer().readerAt(getInstanceFieldsOffset());
|
||||
DexReader reader = dexFile.getDataBuffer().readerAt(getInstanceFieldsOffset());
|
||||
|
||||
final AnnotationsDirectory annotationsDirectory = getAnnotationsDirectory();
|
||||
final int fieldsStartOffset = reader.getOffset();
|
||||
@ -228,7 +230,8 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
||||
final AnnotationsDirectory.AnnotationIterator annotationIterator =
|
||||
annotationsDirectory.getFieldAnnotationIterator();
|
||||
|
||||
return new VariableSizeLookaheadIterator<DexBackedField>(dexFile, fieldsStartOffset) {
|
||||
return new VariableSizeLookaheadIterator<DexBackedField>(
|
||||
dexFile.getDataBuffer(), fieldsStartOffset) {
|
||||
private int count;
|
||||
@Nullable private FieldReference previousField;
|
||||
private int previousIndex;
|
||||
@ -283,7 +286,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
||||
@Nonnull
|
||||
public Iterable<? extends DexBackedMethod> getDirectMethods(final boolean skipDuplicates) {
|
||||
if (directMethodCount > 0) {
|
||||
DexReader reader = dexFile.getBuffer().readerAt(getDirectMethodsOffset());
|
||||
DexReader reader = dexFile.getDataBuffer().readerAt(getDirectMethodsOffset());
|
||||
|
||||
final AnnotationsDirectory annotationsDirectory = getAnnotationsDirectory();
|
||||
final int methodsStartOffset = reader.getOffset();
|
||||
@ -297,7 +300,8 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
||||
final AnnotationsDirectory.AnnotationIterator parameterAnnotationIterator =
|
||||
annotationsDirectory.getParameterAnnotationIterator();
|
||||
|
||||
return new VariableSizeLookaheadIterator<DexBackedMethod>(dexFile, methodsStartOffset) {
|
||||
return new VariableSizeLookaheadIterator<DexBackedMethod>(
|
||||
dexFile.getDataBuffer(), methodsStartOffset) {
|
||||
private int count;
|
||||
@Nullable private MethodReference previousMethod;
|
||||
private int previousIndex;
|
||||
@ -340,7 +344,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
||||
@Nonnull
|
||||
public Iterable<? extends DexBackedMethod> getVirtualMethods(final boolean skipDuplicates) {
|
||||
if (virtualMethodCount > 0) {
|
||||
DexReader reader = dexFile.getBuffer().readerAt(getVirtualMethodsOffset());
|
||||
DexReader reader = dexFile.getDataBuffer().readerAt(getVirtualMethodsOffset());
|
||||
|
||||
final AnnotationsDirectory annotationsDirectory = getAnnotationsDirectory();
|
||||
final int methodsStartOffset = reader.getOffset();
|
||||
@ -354,7 +358,8 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
||||
@Nonnull
|
||||
@Override
|
||||
public Iterator<DexBackedMethod> iterator() {
|
||||
return new VariableSizeLookaheadIterator<DexBackedMethod>(dexFile, methodsStartOffset) {
|
||||
return new VariableSizeLookaheadIterator<DexBackedMethod>(
|
||||
dexFile.getDataBuffer(), methodsStartOffset) {
|
||||
private int count;
|
||||
@Nullable private MethodReference previousMethod;
|
||||
private int previousIndex;
|
||||
@ -414,7 +419,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
||||
if (instanceFieldsOffset > 0) {
|
||||
return instanceFieldsOffset;
|
||||
}
|
||||
DexReader reader = dexFile.getBuffer().readerAt(staticFieldsOffset);
|
||||
DexReader reader = dexFile.getDataBuffer().readerAt(staticFieldsOffset);
|
||||
DexBackedField.skipFields(reader, staticFieldCount);
|
||||
instanceFieldsOffset = reader.getOffset();
|
||||
return instanceFieldsOffset;
|
||||
@ -424,7 +429,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
||||
if (directMethodsOffset > 0) {
|
||||
return directMethodsOffset;
|
||||
}
|
||||
DexReader reader = dexFile.getBuffer().readerAt(getInstanceFieldsOffset());
|
||||
DexReader reader = dexFile.getDataBuffer().readerAt(getInstanceFieldsOffset());
|
||||
DexBackedField.skipFields(reader, instanceFieldCount);
|
||||
directMethodsOffset = reader.getOffset();
|
||||
return directMethodsOffset;
|
||||
@ -434,7 +439,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
||||
if (virtualMethodsOffset > 0) {
|
||||
return virtualMethodsOffset;
|
||||
}
|
||||
DexReader reader = dexFile.getBuffer().readerAt(getDirectMethodsOffset());
|
||||
DexReader reader = dexFile.getDataBuffer().readerAt(getDirectMethodsOffset());
|
||||
DexBackedMethod.skipMethods(reader, directMethodCount);
|
||||
virtualMethodsOffset = reader.getOffset();
|
||||
return virtualMethodsOffset;
|
||||
@ -477,14 +482,14 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
||||
int staticInitialValuesOffset =
|
||||
dexFile.getBuffer().readSmallUint(classDefOffset + ClassDefItem.STATIC_VALUES_OFFSET);
|
||||
if (staticInitialValuesOffset != 0) {
|
||||
DexReader reader = dexFile.getBuffer().readerAt(staticInitialValuesOffset);
|
||||
DexReader reader = dexFile.getDataBuffer().readerAt(staticInitialValuesOffset);
|
||||
size += reader.peekSmallUleb128Size(); //encoded_array size field
|
||||
}
|
||||
|
||||
//class_data_item
|
||||
int classDataOffset = dexFile.getBuffer().readSmallUint(classDefOffset + ClassDefItem.CLASS_DATA_OFFSET);
|
||||
if (classDataOffset > 0) {
|
||||
DexReader reader = dexFile.getBuffer().readerAt(classDataOffset);
|
||||
DexReader reader = dexFile.getDataBuffer().readerAt(classDataOffset);
|
||||
reader.readSmallUleb128(); //staticFieldCount
|
||||
reader.readSmallUleb128(); //instanceFieldCount
|
||||
reader.readSmallUleb128(); //directMethodCount
|
||||
|
@ -210,7 +210,7 @@ public class DexBackedDexFile implements DexFile {
|
||||
}
|
||||
|
||||
public List<MapItem> getMapItems() {
|
||||
final int mapSize = dexBuffer.readSmallUint(mapOffset);
|
||||
final int mapSize = dataBuffer.readSmallUint(mapOffset);
|
||||
|
||||
return new FixedSizeList<MapItem>() {
|
||||
@Override
|
||||
@ -257,7 +257,7 @@ public class DexBackedDexFile implements DexFile {
|
||||
public String get(int index) {
|
||||
int stringOffset = getOffset(index);
|
||||
int stringDataOffset = dexBuffer.readSmallUint(stringOffset);
|
||||
DexReader reader = dexBuffer.readerAt(stringDataOffset);
|
||||
DexReader reader = dataBuffer.readerAt(stringDataOffset);
|
||||
int utf16Length = reader.readSmallUleb128();
|
||||
return reader.readString(utf16Length);
|
||||
}
|
||||
|
@ -168,13 +168,13 @@ public class DexBackedMethod extends BaseMethodReference implements Method {
|
||||
public List<String> getParameterTypes() {
|
||||
final int parametersOffset = getParametersOffset();
|
||||
if (parametersOffset > 0) {
|
||||
final int parameterCount = dexFile.getBuffer().readSmallUint(parametersOffset + TypeListItem.SIZE_OFFSET);
|
||||
final int parameterCount = dexFile.getDataBuffer().readSmallUint(parametersOffset + TypeListItem.SIZE_OFFSET);
|
||||
final int paramListStart = parametersOffset + TypeListItem.LIST_OFFSET;
|
||||
return new FixedSizeList<String>() {
|
||||
@Nonnull
|
||||
@Override
|
||||
public String readItem(final int index) {
|
||||
return dexFile.getTypeSection().get(dexFile.getBuffer().readUshort(paramListStart + 2*index));
|
||||
return dexFile.getTypeSection().get(dexFile.getDataBuffer().readUshort(paramListStart + 2*index));
|
||||
}
|
||||
@Override public int size() { return parameterCount; }
|
||||
};
|
||||
@ -245,7 +245,7 @@ public class DexBackedMethod extends BaseMethodReference implements Method {
|
||||
public int getSize() {
|
||||
int size = 0;
|
||||
|
||||
DexReader reader = dexFile.getBuffer().readerAt(startOffset);
|
||||
DexReader reader = dexFile.getDataBuffer().readerAt(startOffset);
|
||||
reader.readLargeUleb128(); //method_idx_diff
|
||||
reader.readSmallUleb128(); //access_flags
|
||||
reader.readSmallUleb128(); //code_off
|
||||
|
@ -66,14 +66,15 @@ public class DexBackedMethodImplementation implements MethodImplementation {
|
||||
|
||||
@Nonnull @Override public Iterable<? extends Instruction> getInstructions() {
|
||||
// instructionsSize is the number of 16-bit code units in the instruction list, not the number of instructions
|
||||
int instructionsSize = dexFile.getBuffer().readSmallUint(codeOffset + CodeItem.INSTRUCTION_COUNT_OFFSET);
|
||||
int instructionsSize = dexFile.getDataBuffer().readSmallUint(codeOffset + CodeItem.INSTRUCTION_COUNT_OFFSET);
|
||||
|
||||
final int instructionsStartOffset = codeOffset + CodeItem.INSTRUCTION_START_OFFSET;
|
||||
final int endOffset = instructionsStartOffset + (instructionsSize*2);
|
||||
return new Iterable<Instruction>() {
|
||||
@Override
|
||||
public Iterator<Instruction> iterator() {
|
||||
return new VariableSizeLookaheadIterator<Instruction>(dexFile, instructionsStartOffset) {
|
||||
return new VariableSizeLookaheadIterator<Instruction>(
|
||||
dexFile.getDataBuffer(), instructionsStartOffset) {
|
||||
@Override
|
||||
protected Instruction readNextItem(@Nonnull DexReader reader) {
|
||||
if (reader.getOffset() >= endOffset) {
|
||||
@ -97,9 +98,9 @@ public class DexBackedMethodImplementation implements MethodImplementation {
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<? extends DexBackedTryBlock> getTryBlocks() {
|
||||
final int triesSize = dexFile.getBuffer().readUshort(codeOffset + CodeItem.TRIES_SIZE_OFFSET);
|
||||
final int triesSize = dexFile.getDataBuffer().readUshort(codeOffset + CodeItem.TRIES_SIZE_OFFSET);
|
||||
if (triesSize > 0) {
|
||||
int instructionsSize = dexFile.getBuffer().readSmallUint(codeOffset + CodeItem.INSTRUCTION_COUNT_OFFSET);
|
||||
int instructionsSize = dexFile.getDataBuffer().readSmallUint(codeOffset + CodeItem.INSTRUCTION_COUNT_OFFSET);
|
||||
final int triesStartOffset = AlignmentUtils.alignOffset(
|
||||
codeOffset + CodeItem.INSTRUCTION_START_OFFSET + (instructionsSize*2), 4);
|
||||
final int handlersStartOffset = triesStartOffset + triesSize*CodeItem.TryItem.ITEM_SIZE;
|
||||
@ -124,7 +125,7 @@ public class DexBackedMethodImplementation implements MethodImplementation {
|
||||
|
||||
@Nonnull
|
||||
private DebugInfo getDebugInfo() {
|
||||
int debugOffset = dexFile.getBuffer().readInt(codeOffset + CodeItem.DEBUG_INFO_OFFSET);
|
||||
int debugOffset = dexFile.getDataBuffer().readInt(codeOffset + CodeItem.DEBUG_INFO_OFFSET);
|
||||
|
||||
if (debugOffset == -1 || debugOffset == 0) {
|
||||
return DebugInfo.newOrEmpty(dexFile, 0, this);
|
||||
@ -133,7 +134,7 @@ public class DexBackedMethodImplementation implements MethodImplementation {
|
||||
System.err.println(String.format("%s: Invalid debug offset", method));
|
||||
return DebugInfo.newOrEmpty(dexFile, 0, this);
|
||||
}
|
||||
if (debugOffset >= dexFile.getBuffer().buf.length) {
|
||||
if ((debugOffset + dexFile.getBaseDataOffset()) >= dexFile.getBuffer().buf.length) {
|
||||
System.err.println(String.format("%s: Invalid debug offset", method));
|
||||
return DebugInfo.newOrEmpty(dexFile, 0, this);
|
||||
}
|
||||
@ -164,7 +165,7 @@ public class DexBackedMethodImplementation implements MethodImplementation {
|
||||
int lastOffset = codeOffset + CodeItem.INSTRUCTION_START_OFFSET;
|
||||
|
||||
//set code_item ending offset to the end of instructions list (insns_size * ushort)
|
||||
lastOffset += dexFile.getBuffer().readSmallUint(codeOffset + CodeItem.INSTRUCTION_COUNT_OFFSET) * 2;
|
||||
lastOffset += dexFile.getDataBuffer().readSmallUint(codeOffset + CodeItem.INSTRUCTION_COUNT_OFFSET) * 2;
|
||||
|
||||
//read any exception handlers and move code_item offset to the end
|
||||
for (DexBackedTryBlock tryBlock: getTryBlocks()) {
|
||||
|
@ -66,7 +66,8 @@ public class DexBackedOdexFile extends DexBackedDexFile {
|
||||
DexBuffer fromStartBuffer = new DexBuffer(getBuffer().buf, 0);
|
||||
int dependencyCount = fromStartBuffer.readInt(dependencyOffset + DEPENDENCY_COUNT_OFFSET);
|
||||
|
||||
return new VariableSizeList<String>(this, dependencyOffset + DEPENDENCY_START_OFFSET, dependencyCount) {
|
||||
return new VariableSizeList<String>(
|
||||
this.getDataBuffer(), dependencyOffset + DEPENDENCY_START_OFFSET, dependencyCount) {
|
||||
@Override protected String readNextItem(@Nonnull DexReader reader, int index) {
|
||||
int length = reader.readInt();
|
||||
int offset = reader.getOffset();
|
||||
|
@ -52,23 +52,24 @@ public class DexBackedTryBlock extends BaseTryBlock<DexBackedExceptionHandler> {
|
||||
}
|
||||
|
||||
@Override public int getStartCodeAddress() {
|
||||
return dexFile.getBuffer().readSmallUint(tryItemOffset + CodeItem.TryItem.START_ADDRESS_OFFSET);
|
||||
return dexFile.getDataBuffer().readSmallUint(tryItemOffset + CodeItem.TryItem.START_ADDRESS_OFFSET);
|
||||
}
|
||||
|
||||
@Override public int getCodeUnitCount() {
|
||||
return dexFile.getBuffer().readUshort(tryItemOffset + CodeItem.TryItem.CODE_UNIT_COUNT_OFFSET);
|
||||
return dexFile.getDataBuffer().readUshort(tryItemOffset + CodeItem.TryItem.CODE_UNIT_COUNT_OFFSET);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<? extends DexBackedExceptionHandler> getExceptionHandlers() {
|
||||
DexReader reader = dexFile.getBuffer().readerAt(
|
||||
handlersStartOffset + dexFile.getBuffer().readUshort(tryItemOffset + CodeItem.TryItem.HANDLER_OFFSET));
|
||||
DexReader reader = dexFile.getDataBuffer().readerAt(
|
||||
handlersStartOffset + dexFile.getDataBuffer().readUshort(tryItemOffset + CodeItem.TryItem.HANDLER_OFFSET));
|
||||
final int encodedSize = reader.readSleb128();
|
||||
|
||||
if (encodedSize > 0) {
|
||||
//no catch-all
|
||||
return new VariableSizeList<DexBackedTypedExceptionHandler>(dexFile, reader.getOffset(), encodedSize) {
|
||||
return new VariableSizeList<DexBackedTypedExceptionHandler>(
|
||||
dexFile.getDataBuffer(), reader.getOffset(), encodedSize) {
|
||||
@Nonnull
|
||||
@Override
|
||||
protected DexBackedTypedExceptionHandler readNextItem(@Nonnull DexReader reader, int index) {
|
||||
@ -78,7 +79,8 @@ public class DexBackedTryBlock extends BaseTryBlock<DexBackedExceptionHandler> {
|
||||
} else {
|
||||
//with catch-all
|
||||
final int sizeWithCatchAll = (-1 * encodedSize) + 1;
|
||||
return new VariableSizeList<DexBackedExceptionHandler>(dexFile, reader.getOffset(), sizeWithCatchAll) {
|
||||
return new VariableSizeList<DexBackedExceptionHandler>(
|
||||
dexFile.getDataBuffer(), reader.getOffset(), sizeWithCatchAll) {
|
||||
@Nonnull
|
||||
@Override
|
||||
protected DexBackedExceptionHandler readNextItem(@Nonnull DexReader dexReader, int index) {
|
||||
|
@ -54,8 +54,8 @@ public class DexBackedArrayPayload extends DexBackedInstruction implements Array
|
||||
int instructionStart) {
|
||||
super(dexFile, OPCODE, instructionStart);
|
||||
|
||||
elementWidth = dexFile.getBuffer().readUshort(instructionStart + ELEMENT_WIDTH_OFFSET);
|
||||
elementCount = dexFile.getBuffer().readSmallUint(instructionStart + ELEMENT_COUNT_OFFSET);
|
||||
elementWidth = dexFile.getDataBuffer().readUshort(instructionStart + ELEMENT_WIDTH_OFFSET);
|
||||
elementCount = dexFile.getDataBuffer().readSmallUint(instructionStart + ELEMENT_COUNT_OFFSET);
|
||||
if (((long)elementWidth) * elementCount > Integer.MAX_VALUE) {
|
||||
throw new ExceptionWithContext("Invalid array-payload instruction: element width*count overflows");
|
||||
}
|
||||
@ -78,7 +78,7 @@ public class DexBackedArrayPayload extends DexBackedInstruction implements Array
|
||||
@Nonnull
|
||||
@Override
|
||||
public Number readItem(int index) {
|
||||
return dexFile.getBuffer().readByte(elementsStart + index);
|
||||
return dexFile.getDataBuffer().readByte(elementsStart + index);
|
||||
}
|
||||
};
|
||||
case 2:
|
||||
@ -86,7 +86,7 @@ public class DexBackedArrayPayload extends DexBackedInstruction implements Array
|
||||
@Nonnull
|
||||
@Override
|
||||
public Number readItem(int index) {
|
||||
return dexFile.getBuffer().readShort(elementsStart + index*2);
|
||||
return dexFile.getDataBuffer().readShort(elementsStart + index*2);
|
||||
}
|
||||
};
|
||||
case 4:
|
||||
@ -94,7 +94,7 @@ public class DexBackedArrayPayload extends DexBackedInstruction implements Array
|
||||
@Nonnull
|
||||
@Override
|
||||
public Number readItem(int index) {
|
||||
return dexFile.getBuffer().readInt(elementsStart + index*4);
|
||||
return dexFile.getDataBuffer().readInt(elementsStart + index*4);
|
||||
}
|
||||
};
|
||||
case 8:
|
||||
@ -102,7 +102,7 @@ public class DexBackedArrayPayload extends DexBackedInstruction implements Array
|
||||
@Nonnull
|
||||
@Override
|
||||
public Number readItem(int index) {
|
||||
return dexFile.getBuffer().readLong(elementsStart + index*8);
|
||||
return dexFile.getDataBuffer().readLong(elementsStart + index*8);
|
||||
}
|
||||
};
|
||||
default:
|
||||
|
@ -66,7 +66,9 @@ public abstract class DexBackedInstruction implements Instruction {
|
||||
|
||||
Opcode opcode = dexFile.getOpcodes().getOpcodeByValue(opcodeValue);
|
||||
|
||||
Instruction instruction = buildInstruction(dexFile, opcode, reader.getOffset());
|
||||
Instruction instruction = buildInstruction(dexFile, opcode,
|
||||
reader.getOffset() + reader.dexBuf.getBaseOffset() -
|
||||
dexFile.getBuffer().getBaseOffset() - dexFile.getBaseDataOffset());
|
||||
reader.moveRelative(instruction.getCodeUnits()*2);
|
||||
return instruction;
|
||||
}
|
||||
|
@ -44,5 +44,5 @@ public class DexBackedInstruction10t extends DexBackedInstruction implements Ins
|
||||
super(dexFile, opcode, instructionStart);
|
||||
}
|
||||
|
||||
@Override public int getCodeOffset() { return dexFile.getBuffer().readByte(instructionStart + 1); }
|
||||
@Override public int getCodeOffset() { return dexFile.getDataBuffer().readByte(instructionStart + 1); }
|
||||
}
|
||||
|
@ -47,12 +47,12 @@ public class DexBackedInstruction11n extends DexBackedInstruction implements Ins
|
||||
|
||||
@Override
|
||||
public int getRegisterA() {
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getBuffer().readByte(instructionStart + 1));
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getDataBuffer().readByte(instructionStart + 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNarrowLiteral() {
|
||||
return NibbleUtils.extractHighSignedNibble(dexFile.getBuffer().readByte(instructionStart + 1));
|
||||
return NibbleUtils.extractHighSignedNibble(dexFile.getDataBuffer().readByte(instructionStart + 1));
|
||||
}
|
||||
|
||||
@Override public long getWideLiteral() { return getNarrowLiteral(); }
|
||||
|
@ -44,5 +44,5 @@ public class DexBackedInstruction11x extends DexBackedInstruction implements Ins
|
||||
super(dexFile, opcode, instructionStart);
|
||||
}
|
||||
|
||||
@Override public int getRegisterA() { return dexFile.getBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getRegisterA() { return dexFile.getDataBuffer().readUbyte(instructionStart + 1); }
|
||||
}
|
||||
|
@ -47,11 +47,11 @@ public class DexBackedInstruction12x extends DexBackedInstruction implements Ins
|
||||
|
||||
@Override
|
||||
public int getRegisterA() {
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getBuffer().readByte(instructionStart + 1));
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getDataBuffer().readByte(instructionStart + 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterB() {
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getBuffer().readByte(instructionStart + 1));
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getDataBuffer().readByte(instructionStart + 1));
|
||||
}
|
||||
}
|
||||
|
@ -47,12 +47,14 @@ public class DexBackedInstruction20bc extends DexBackedInstruction implements In
|
||||
super(dexFile, opcode, instructionStart);
|
||||
}
|
||||
|
||||
@Override public int getVerificationError() { return dexFile.getBuffer().readUbyte(instructionStart + 1) & 0x3f; }
|
||||
@Override public int getVerificationError() {
|
||||
return dexFile.getDataBuffer().readUbyte(instructionStart + 1) & 0x3f;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public Reference getReference() {
|
||||
int referenceIndex = dexFile.getBuffer().readUshort(instructionStart + 2);
|
||||
int referenceIndex = dexFile.getDataBuffer().readUshort(instructionStart + 2);
|
||||
try {
|
||||
int referenceType = getReferenceType();
|
||||
return DexBackedReference.makeReference(dexFile, referenceType, referenceIndex);
|
||||
@ -68,7 +70,7 @@ public class DexBackedInstruction20bc extends DexBackedInstruction implements In
|
||||
}
|
||||
|
||||
@Override public int getReferenceType() {
|
||||
int referenceType = (dexFile.getBuffer().readUbyte(instructionStart + 1) >>> 6) + 1;
|
||||
int referenceType = (dexFile.getDataBuffer().readUbyte(instructionStart + 1) >>> 6) + 1;
|
||||
ReferenceType.validateReferenceType(referenceType);
|
||||
return referenceType;
|
||||
}
|
||||
|
@ -44,5 +44,5 @@ public class DexBackedInstruction20t extends DexBackedInstruction implements Ins
|
||||
super(dexFile, opcode, instructionStart);
|
||||
}
|
||||
|
||||
@Override public int getCodeOffset() { return dexFile.getBuffer().readShort(instructionStart + 2); }
|
||||
@Override public int getCodeOffset() { return dexFile.getDataBuffer().readShort(instructionStart + 2); }
|
||||
}
|
||||
|
@ -46,13 +46,13 @@ public class DexBackedInstruction21c extends DexBackedInstruction implements Ins
|
||||
super(dexFile, opcode, instructionStart);
|
||||
}
|
||||
|
||||
@Override public int getRegisterA() { return dexFile.getBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getRegisterA() { return dexFile.getDataBuffer().readUbyte(instructionStart + 1); }
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public Reference getReference() {
|
||||
return DexBackedReference.makeReference(
|
||||
dexFile, opcode.referenceType, dexFile.getBuffer().readUshort(instructionStart + 2));
|
||||
dexFile, opcode.referenceType, dexFile.getDataBuffer().readUshort(instructionStart + 2));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -44,8 +44,8 @@ public class DexBackedInstruction21ih extends DexBackedInstruction implements In
|
||||
super(dexFile, opcode, instructionStart);
|
||||
}
|
||||
|
||||
@Override public int getRegisterA() { return dexFile.getBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getRegisterA() { return dexFile.getDataBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getNarrowLiteral() { return getHatLiteral() << 16; }
|
||||
@Override public long getWideLiteral() { return getNarrowLiteral(); }
|
||||
@Override public short getHatLiteral() { return (short)dexFile.getBuffer().readShort(instructionStart + 2); }
|
||||
@Override public short getHatLiteral() { return (short)dexFile.getDataBuffer().readShort(instructionStart + 2); }
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ public class DexBackedInstruction21lh extends DexBackedInstruction implements In
|
||||
super(dexFile, opcode, instructionStart);
|
||||
}
|
||||
|
||||
@Override public int getRegisterA() { return dexFile.getBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getRegisterA() { return dexFile.getDataBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public long getWideLiteral() { return ((long)getHatLiteral()) << 48; }
|
||||
@Override public short getHatLiteral() { return (short)dexFile.getBuffer().readShort(instructionStart + 2); }
|
||||
@Override public short getHatLiteral() { return (short)dexFile.getDataBuffer().readShort(instructionStart + 2); }
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ public class DexBackedInstruction21s extends DexBackedInstruction implements Ins
|
||||
super(dexFile, opcode, instructionStart);
|
||||
}
|
||||
|
||||
@Override public int getRegisterA() { return dexFile.getBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getNarrowLiteral() { return dexFile.getBuffer().readShort(instructionStart + 2); }
|
||||
@Override public int getRegisterA() { return dexFile.getDataBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getNarrowLiteral() { return dexFile.getDataBuffer().readShort(instructionStart + 2); }
|
||||
@Override public long getWideLiteral() { return getNarrowLiteral(); }
|
||||
}
|
||||
|
@ -44,6 +44,6 @@ public class DexBackedInstruction21t extends DexBackedInstruction implements Ins
|
||||
super(dexFile, opcode, instructionStart);
|
||||
}
|
||||
|
||||
@Override public int getRegisterA() { return dexFile.getBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getCodeOffset() { return dexFile.getBuffer().readShort(instructionStart + 2); }
|
||||
@Override public int getRegisterA() { return dexFile.getDataBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getCodeOffset() { return dexFile.getDataBuffer().readShort(instructionStart + 2); }
|
||||
}
|
||||
|
@ -44,8 +44,8 @@ public class DexBackedInstruction22b extends DexBackedInstruction implements Ins
|
||||
super(dexFile, opcode, instructionStart);
|
||||
}
|
||||
|
||||
@Override public int getRegisterA() { return dexFile.getBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getRegisterB() { return dexFile.getBuffer().readUbyte(instructionStart + 2); }
|
||||
@Override public int getNarrowLiteral() { return dexFile.getBuffer().readByte(instructionStart + 3); }
|
||||
@Override public int getRegisterA() { return dexFile.getDataBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getRegisterB() { return dexFile.getDataBuffer().readUbyte(instructionStart + 2); }
|
||||
@Override public int getNarrowLiteral() { return dexFile.getDataBuffer().readByte(instructionStart + 3); }
|
||||
@Override public long getWideLiteral() { return getNarrowLiteral(); }
|
||||
}
|
||||
|
@ -49,19 +49,19 @@ public class DexBackedInstruction22c extends DexBackedInstruction implements Ins
|
||||
|
||||
@Override
|
||||
public int getRegisterA() {
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getBuffer().readByte(instructionStart + 1));
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getDataBuffer().readByte(instructionStart + 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterB() {
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getBuffer().readByte(instructionStart + 1));
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getDataBuffer().readByte(instructionStart + 1));
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public Reference getReference() {
|
||||
return DexBackedReference.makeReference(
|
||||
dexFile, opcode.referenceType, dexFile.getBuffer().readUshort(instructionStart + 2));
|
||||
dexFile, opcode.referenceType, dexFile.getDataBuffer().readUshort(instructionStart + 2));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -47,16 +47,16 @@ public class DexBackedInstruction22cs extends DexBackedInstruction implements In
|
||||
|
||||
@Override
|
||||
public int getRegisterA() {
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getBuffer().readByte(instructionStart + 1));
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getDataBuffer().readByte(instructionStart + 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterB() {
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getBuffer().readByte(instructionStart + 1));
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getDataBuffer().readByte(instructionStart + 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFieldOffset() {
|
||||
return dexFile.getBuffer().readUshort(instructionStart + 2);
|
||||
return dexFile.getDataBuffer().readUshort(instructionStart + 2);
|
||||
}
|
||||
}
|
||||
|
@ -47,14 +47,14 @@ public class DexBackedInstruction22s extends DexBackedInstruction implements Ins
|
||||
|
||||
@Override
|
||||
public int getRegisterA() {
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getBuffer().readByte(instructionStart + 1));
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getDataBuffer().readByte(instructionStart + 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterB() {
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getBuffer().readByte(instructionStart + 1));
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getDataBuffer().readByte(instructionStart + 1));
|
||||
}
|
||||
|
||||
@Override public int getNarrowLiteral() { return dexFile.getBuffer().readShort(instructionStart + 2); }
|
||||
@Override public int getNarrowLiteral() { return dexFile.getDataBuffer().readShort(instructionStart + 2); }
|
||||
@Override public long getWideLiteral() { return getNarrowLiteral(); }
|
||||
}
|
||||
|
@ -47,13 +47,13 @@ public class DexBackedInstruction22t extends DexBackedInstruction implements Ins
|
||||
|
||||
@Override
|
||||
public int getRegisterA() {
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getBuffer().readByte(instructionStart + 1));
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getDataBuffer().readByte(instructionStart + 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterB() {
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getBuffer().readByte(instructionStart + 1));
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getDataBuffer().readByte(instructionStart + 1));
|
||||
}
|
||||
|
||||
@Override public int getCodeOffset() { return dexFile.getBuffer().readShort(instructionStart + 2); }
|
||||
@Override public int getCodeOffset() { return dexFile.getDataBuffer().readShort(instructionStart + 2); }
|
||||
}
|
||||
|
@ -44,6 +44,6 @@ public class DexBackedInstruction22x extends DexBackedInstruction implements Ins
|
||||
super(dexFile, opcode, instructionStart);
|
||||
}
|
||||
|
||||
@Override public int getRegisterA() { return dexFile.getBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getRegisterB() { return dexFile.getBuffer().readUshort(instructionStart + 2); }
|
||||
@Override public int getRegisterA() { return dexFile.getDataBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getRegisterB() { return dexFile.getDataBuffer().readUshort(instructionStart + 2); }
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ public class DexBackedInstruction23x extends DexBackedInstruction implements Ins
|
||||
super(dexFile, opcode, instructionStart);
|
||||
}
|
||||
|
||||
@Override public int getRegisterA() { return dexFile.getBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getRegisterB() { return dexFile.getBuffer().readUbyte(instructionStart + 2); }
|
||||
@Override public int getRegisterC() { return dexFile.getBuffer().readUbyte(instructionStart + 3); }
|
||||
@Override public int getRegisterA() { return dexFile.getDataBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getRegisterB() { return dexFile.getDataBuffer().readUbyte(instructionStart + 2); }
|
||||
@Override public int getRegisterC() { return dexFile.getDataBuffer().readUbyte(instructionStart + 3); }
|
||||
}
|
||||
|
@ -44,5 +44,5 @@ public class DexBackedInstruction30t extends DexBackedInstruction implements Ins
|
||||
super(dexFile, opcode, instructionStart);
|
||||
}
|
||||
|
||||
@Override public int getCodeOffset() { return dexFile.getBuffer().readInt(instructionStart + 2); }
|
||||
@Override public int getCodeOffset() { return dexFile.getDataBuffer().readInt(instructionStart + 2); }
|
||||
}
|
||||
|
@ -46,13 +46,13 @@ public class DexBackedInstruction31c extends DexBackedInstruction implements Ins
|
||||
super(dexFile, opcode, instructionStart);
|
||||
}
|
||||
|
||||
@Override public int getRegisterA() { return dexFile.getBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getRegisterA() { return dexFile.getDataBuffer().readUbyte(instructionStart + 1); }
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public Reference getReference() {
|
||||
return DexBackedReference.makeReference(dexFile, opcode.referenceType,
|
||||
dexFile.getBuffer().readSmallUint(instructionStart + 2));
|
||||
dexFile.getDataBuffer().readSmallUint(instructionStart + 2));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -44,7 +44,7 @@ public class DexBackedInstruction31i extends DexBackedInstruction implements Ins
|
||||
super(dexFile, opcode, instructionStart);
|
||||
}
|
||||
|
||||
@Override public int getRegisterA() { return dexFile.getBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getNarrowLiteral() { return dexFile.getBuffer().readInt(instructionStart + 2); }
|
||||
@Override public int getRegisterA() { return dexFile.getDataBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getNarrowLiteral() { return dexFile.getDataBuffer().readInt(instructionStart + 2); }
|
||||
@Override public long getWideLiteral() { return getNarrowLiteral(); }
|
||||
}
|
||||
|
@ -44,6 +44,6 @@ public class DexBackedInstruction31t extends DexBackedInstruction implements Ins
|
||||
super(dexFile, opcode, instructionStart);
|
||||
}
|
||||
|
||||
@Override public int getRegisterA() { return dexFile.getBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getCodeOffset() { return dexFile.getBuffer().readInt(instructionStart + 2); }
|
||||
@Override public int getRegisterA() { return dexFile.getDataBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public int getCodeOffset() { return dexFile.getDataBuffer().readInt(instructionStart + 2); }
|
||||
}
|
||||
|
@ -44,6 +44,6 @@ public class DexBackedInstruction32x extends DexBackedInstruction implements Ins
|
||||
super(dexFile, opcode, instructionStart);
|
||||
}
|
||||
|
||||
@Override public int getRegisterA() { return dexFile.getBuffer().readUshort(instructionStart + 2); }
|
||||
@Override public int getRegisterB() { return dexFile.getBuffer().readUshort(instructionStart + 4); }
|
||||
@Override public int getRegisterA() { return dexFile.getDataBuffer().readUshort(instructionStart + 2); }
|
||||
@Override public int getRegisterB() { return dexFile.getDataBuffer().readUshort(instructionStart + 4); }
|
||||
}
|
||||
|
@ -48,39 +48,39 @@ public class DexBackedInstruction35c extends DexBackedInstruction implements Ins
|
||||
}
|
||||
|
||||
@Override public int getRegisterCount() {
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 1));
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterC() {
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 4));
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 4));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterD() {
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 4));
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 4));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterE() {
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 5));
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 5));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterF() {
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 5));
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 5));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterG() {
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 1));
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 1));
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public Reference getReference() {
|
||||
return DexBackedReference.makeReference(dexFile, opcode.referenceType,
|
||||
dexFile.getBuffer().readUshort(instructionStart + 2));
|
||||
dexFile.getDataBuffer().readUshort(instructionStart + 2));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -46,36 +46,36 @@ public class DexBackedInstruction35mi extends DexBackedInstruction implements In
|
||||
}
|
||||
|
||||
@Override public int getRegisterCount() {
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 1));
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterC() {
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 4));
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 4));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterD() {
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 4));
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 4));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterE() {
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 5));
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 5));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterF() {
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 5));
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 5));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterG() {
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 1));
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getInlineIndex() {
|
||||
return dexFile.getBuffer().readUshort(instructionStart + 2);
|
||||
return dexFile.getDataBuffer().readUshort(instructionStart + 2);
|
||||
}
|
||||
}
|
||||
|
@ -46,36 +46,36 @@ public class DexBackedInstruction35ms extends DexBackedInstruction implements In
|
||||
}
|
||||
|
||||
@Override public int getRegisterCount() {
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 1));
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterC() {
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 4));
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 4));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterD() {
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 4));
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 4));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterE() {
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 5));
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 5));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterF() {
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 5));
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 5));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterG() {
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 1));
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getVtableIndex() {
|
||||
return dexFile.getBuffer().readUshort(instructionStart + 2);
|
||||
return dexFile.getDataBuffer().readUshort(instructionStart + 2);
|
||||
}
|
||||
}
|
||||
|
@ -47,19 +47,19 @@ public class DexBackedInstruction3rc extends DexBackedInstruction implements Ins
|
||||
}
|
||||
|
||||
@Override public int getRegisterCount() {
|
||||
return dexFile.getBuffer().readUbyte(instructionStart + 1);
|
||||
return dexFile.getDataBuffer().readUbyte(instructionStart + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStartRegister() {
|
||||
return dexFile.getBuffer().readUshort(instructionStart + 4);
|
||||
return dexFile.getDataBuffer().readUshort(instructionStart + 4);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public Reference getReference() {
|
||||
return DexBackedReference.makeReference(dexFile, opcode.referenceType,
|
||||
dexFile.getBuffer().readUshort(instructionStart + 2));
|
||||
dexFile.getDataBuffer().readUshort(instructionStart + 2));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -45,16 +45,16 @@ public class DexBackedInstruction3rmi extends DexBackedInstruction implements In
|
||||
}
|
||||
|
||||
@Override public int getRegisterCount() {
|
||||
return dexFile.getBuffer().readUbyte(instructionStart + 1);
|
||||
return dexFile.getDataBuffer().readUbyte(instructionStart + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStartRegister() {
|
||||
return dexFile.getBuffer().readUshort(instructionStart + 4);
|
||||
return dexFile.getDataBuffer().readUshort(instructionStart + 4);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getInlineIndex() {
|
||||
return dexFile.getBuffer().readUshort(instructionStart + 2);
|
||||
return dexFile.getDataBuffer().readUshort(instructionStart + 2);
|
||||
}
|
||||
}
|
||||
|
@ -45,16 +45,16 @@ public class DexBackedInstruction3rms extends DexBackedInstruction implements In
|
||||
}
|
||||
|
||||
@Override public int getRegisterCount() {
|
||||
return dexFile.getBuffer().readUbyte(instructionStart + 1);
|
||||
return dexFile.getDataBuffer().readUbyte(instructionStart + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStartRegister() {
|
||||
return dexFile.getBuffer().readUshort(instructionStart + 4);
|
||||
return dexFile.getDataBuffer().readUshort(instructionStart + 4);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getVtableIndex() {
|
||||
return dexFile.getBuffer().readUshort(instructionStart + 2);
|
||||
return dexFile.getDataBuffer().readUshort(instructionStart + 2);
|
||||
}
|
||||
}
|
||||
|
@ -48,39 +48,39 @@ public class DexBackedInstruction45cc extends DexBackedInstruction implements In
|
||||
}
|
||||
|
||||
@Override public int getRegisterCount() {
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 1));
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterC() {
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 4));
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 4));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterD() {
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 4));
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 4));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterE() {
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 5));
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 5));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterF() {
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 5));
|
||||
return NibbleUtils.extractHighUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 5));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegisterG() {
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getBuffer().readUbyte(instructionStart + 1));
|
||||
return NibbleUtils.extractLowUnsignedNibble(dexFile.getDataBuffer().readUbyte(instructionStart + 1));
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public Reference getReference() {
|
||||
return DexBackedReference.makeReference(dexFile, opcode.referenceType,
|
||||
dexFile.getBuffer().readUshort(instructionStart + 2));
|
||||
dexFile.getDataBuffer().readUshort(instructionStart + 2));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -91,7 +91,7 @@ public class DexBackedInstruction45cc extends DexBackedInstruction implements In
|
||||
@Override
|
||||
public Reference getReference2() {
|
||||
return DexBackedReference.makeReference(dexFile, opcode.referenceType2,
|
||||
dexFile.getBuffer().readUshort(instructionStart + 6));
|
||||
dexFile.getDataBuffer().readUshort(instructionStart + 6));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -47,19 +47,19 @@ public class DexBackedInstruction4rcc extends DexBackedInstruction implements In
|
||||
}
|
||||
|
||||
@Override public int getRegisterCount() {
|
||||
return dexFile.getBuffer().readUbyte(instructionStart + 1);
|
||||
return dexFile.getDataBuffer().readUbyte(instructionStart + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStartRegister() {
|
||||
return dexFile.getBuffer().readUshort(instructionStart + 4);
|
||||
return dexFile.getDataBuffer().readUshort(instructionStart + 4);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public Reference getReference() {
|
||||
return DexBackedReference.makeReference(dexFile, opcode.referenceType,
|
||||
dexFile.getBuffer().readUshort(instructionStart + 2));
|
||||
dexFile.getDataBuffer().readUshort(instructionStart + 2));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -70,7 +70,7 @@ public class DexBackedInstruction4rcc extends DexBackedInstruction implements In
|
||||
@Override
|
||||
public Reference getReference2() {
|
||||
return DexBackedReference.makeReference(dexFile, opcode.referenceType2,
|
||||
dexFile.getBuffer().readUshort(instructionStart + 6));
|
||||
dexFile.getDataBuffer().readUshort(instructionStart + 6));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -44,6 +44,6 @@ public class DexBackedInstruction51l extends DexBackedInstruction implements Ins
|
||||
super(dexFile, opcode, instructionStart);
|
||||
}
|
||||
|
||||
@Override public int getRegisterA() { return dexFile.getBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public long getWideLiteral() { return dexFile.getBuffer().readLong(instructionStart + 2); }
|
||||
@Override public int getRegisterA() { return dexFile.getDataBuffer().readUbyte(instructionStart + 1); }
|
||||
@Override public long getWideLiteral() { return dexFile.getDataBuffer().readLong(instructionStart + 2); }
|
||||
}
|
||||
|
@ -51,13 +51,13 @@ public class DexBackedPackedSwitchPayload extends DexBackedInstruction implement
|
||||
int instructionStart) {
|
||||
super(dexFile, Opcode.PACKED_SWITCH_PAYLOAD, instructionStart);
|
||||
|
||||
elementCount = dexFile.getBuffer().readUshort(instructionStart + ELEMENT_COUNT_OFFSET);
|
||||
elementCount = dexFile.getDataBuffer().readUshort(instructionStart + ELEMENT_COUNT_OFFSET);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<? extends SwitchElement> getSwitchElements() {
|
||||
final int firstKey = dexFile.getBuffer().readInt(instructionStart + FIRST_KEY_OFFSET);
|
||||
final int firstKey = dexFile.getDataBuffer().readInt(instructionStart + FIRST_KEY_OFFSET);
|
||||
return new FixedSizeList<SwitchElement>() {
|
||||
@Nonnull
|
||||
@Override
|
||||
@ -70,7 +70,7 @@ public class DexBackedPackedSwitchPayload extends DexBackedInstruction implement
|
||||
|
||||
@Override
|
||||
public int getOffset() {
|
||||
return dexFile.getBuffer().readInt(instructionStart + TARGETS_OFFSET + index*4);
|
||||
return dexFile.getDataBuffer().readInt(instructionStart + TARGETS_OFFSET + index*4);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ public class DexBackedSparseSwitchPayload extends DexBackedInstruction implement
|
||||
int instructionStart) {
|
||||
super(dexFile, Opcode.SPARSE_SWITCH_PAYLOAD, instructionStart);
|
||||
|
||||
elementCount = dexFile.getBuffer().readUshort(instructionStart + ELEMENT_COUNT_OFFSET);
|
||||
elementCount = dexFile.getDataBuffer().readUshort(instructionStart + ELEMENT_COUNT_OFFSET);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@ -63,12 +63,12 @@ public class DexBackedSparseSwitchPayload extends DexBackedInstruction implement
|
||||
return new SwitchElement() {
|
||||
@Override
|
||||
public int getKey() {
|
||||
return dexFile.getBuffer().readInt(instructionStart + KEYS_OFFSET + index*4);
|
||||
return dexFile.getDataBuffer().readInt(instructionStart + KEYS_OFFSET + index*4);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOffset() {
|
||||
return dexFile.getBuffer().readInt(instructionStart + KEYS_OFFSET + elementCount*4 + index*4);
|
||||
return dexFile.getDataBuffer().readInt(instructionStart + KEYS_OFFSET + elementCount*4 + index*4);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -44,9 +44,9 @@ public class DexBackedUnknownInstruction extends DexBackedInstruction implements
|
||||
}
|
||||
|
||||
@Override public int getOriginalOpcode() {
|
||||
int opcode = dexFile.getBuffer().readUbyte(instructionStart);
|
||||
int opcode = dexFile.getDataBuffer().readUbyte(instructionStart);
|
||||
if (opcode == 0) {
|
||||
opcode = dexFile.getBuffer().readUshort(instructionStart);
|
||||
opcode = dexFile.getDataBuffer().readUshort(instructionStart);
|
||||
}
|
||||
|
||||
return opcode;
|
||||
|
@ -77,7 +77,7 @@ public class AnnotationItem {
|
||||
|
||||
public static String getReferenceAnnotation(@Nonnull DexBackedDexFile dexFile, int annotationItemOffset) {
|
||||
try {
|
||||
DexReader reader = dexFile.getBuffer().readerAt(annotationItemOffset);
|
||||
DexReader reader = dexFile.getDataBuffer().readerAt(annotationItemOffset);
|
||||
reader.readUbyte();
|
||||
int typeIndex = reader.readSmallUleb128();
|
||||
String annotationType = dexFile.getTypeSection().get(typeIndex);
|
||||
|
@ -58,7 +58,7 @@ public class CallSiteIdItem {
|
||||
StringWriter writer = new StringWriter();
|
||||
try {
|
||||
EncodedValueUtils.writeEncodedValue(writer,
|
||||
new DexBackedArrayEncodedValue(dexFile, dexFile.getBuffer().readerAt(callSiteOffset)));
|
||||
new DexBackedArrayEncodedValue(dexFile, dexFile.getDataBuffer().readerAt(callSiteOffset)));
|
||||
} catch (IOException ex) {
|
||||
// Shouldn't get an IOException from a StringWriter..
|
||||
throw new RuntimeException(ex);
|
||||
|
@ -52,7 +52,6 @@ public class ClassDataItem {
|
||||
super.annotateSection(out);
|
||||
}
|
||||
|
||||
|
||||
@Nonnull @Override public String getItemName() {
|
||||
return "class_data_item";
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ public class MapItem {
|
||||
}
|
||||
|
||||
public int getType() {
|
||||
return dexFile.getBuffer().readUshort(offset + TYPE_OFFSET);
|
||||
return dexFile.getDataBuffer().readUshort(offset + TYPE_OFFSET);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@ -63,11 +63,11 @@ public class MapItem {
|
||||
}
|
||||
|
||||
public int getItemCount() {
|
||||
return dexFile.getBuffer().readSmallUint(offset + SIZE_OFFSET);
|
||||
return dexFile.getDataBuffer().readSmallUint(offset + SIZE_OFFSET);
|
||||
}
|
||||
|
||||
public int getOffset() {
|
||||
return dexFile.getBuffer().readSmallUint(offset + OFFSET_OFFSET);
|
||||
return dexFile.getDataBuffer().readSmallUint(offset + OFFSET_OFFSET);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
|
@ -55,7 +55,12 @@ public abstract class SectionAnnotator {
|
||||
this.dexFile = annotator.dexFile;
|
||||
this.itemType = mapItem.getType();
|
||||
|
||||
this.sectionOffset = mapItem.getOffset();
|
||||
if (mapItem.getType() >= ItemType.MAP_LIST) {
|
||||
this.sectionOffset = mapItem.getOffset() + dexFile.getBaseDataOffset();
|
||||
} else {
|
||||
this.sectionOffset = mapItem.getOffset();
|
||||
}
|
||||
|
||||
this.itemCount = mapItem.getItemCount();
|
||||
}
|
||||
|
||||
@ -103,7 +108,7 @@ public abstract class SectionAnnotator {
|
||||
}
|
||||
|
||||
public void setItemIdentity(int itemOffset, String identity) {
|
||||
itemIdentities.put(itemOffset, identity);
|
||||
itemIdentities.put(itemOffset + dexFile.getBaseDataOffset(), identity);
|
||||
}
|
||||
|
||||
public int getItemAlignment() {
|
||||
|
@ -71,7 +71,6 @@ public class StringIdItem {
|
||||
@Nonnull
|
||||
public static String getReferenceAnnotation(@Nonnull DexBackedDexFile dexFile, int stringIndex) {
|
||||
return getReferenceAnnotation(dexFile, stringIndex, false);
|
||||
|
||||
}
|
||||
|
||||
public static String getReferenceAnnotation(@Nonnull DexBackedDexFile dexFile, int stringIndex, boolean quote) {
|
||||
|
@ -89,9 +89,9 @@ public class TypeListItem {
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
int size = dexFile.getBuffer().readSmallUint(typeListOffset);
|
||||
int size = dexFile.getDataBuffer().readSmallUint(typeListOffset);
|
||||
for (int i=0; i<size; i++) {
|
||||
int typeIndex = dexFile.getBuffer().readUshort(typeListOffset + 4 + i*2);
|
||||
int typeIndex = dexFile.getDataBuffer().readUshort(typeListOffset + 4 + i*2);
|
||||
String type = dexFile.getTypeSection().get(typeIndex);
|
||||
sb.append(type);
|
||||
}
|
||||
|
@ -56,13 +56,14 @@ public class DexBackedMethodProtoReference extends BaseMethodProtoReference {
|
||||
final int parametersOffset = dexFile.getBuffer().readSmallUint(dexFile.getProtoSection().getOffset(protoIndex) +
|
||||
ProtoIdItem.PARAMETERS_OFFSET);
|
||||
if (parametersOffset > 0) {
|
||||
final int parameterCount = dexFile.getBuffer().readSmallUint(parametersOffset + TypeListItem.SIZE_OFFSET);
|
||||
final int parameterCount = dexFile.getDataBuffer().readSmallUint(
|
||||
parametersOffset + TypeListItem.SIZE_OFFSET);
|
||||
final int paramListStart = parametersOffset + TypeListItem.LIST_OFFSET;
|
||||
return new FixedSizeList<String>() {
|
||||
@Nonnull
|
||||
@Override
|
||||
public String readItem(final int index) {
|
||||
return dexFile.getTypeSection().get(dexFile.getBuffer().readUshort(paramListStart + 2*index));
|
||||
return dexFile.getTypeSection().get(dexFile.getDataBuffer().readUshort(paramListStart + 2*index));
|
||||
}
|
||||
@Override public int size() { return parameterCount; }
|
||||
};
|
||||
|
@ -73,13 +73,14 @@ public class DexBackedMethodReference extends BaseMethodReference {
|
||||
final int parametersOffset = dexFile.getBuffer().readSmallUint(
|
||||
protoIdItemOffset + ProtoIdItem.PARAMETERS_OFFSET);
|
||||
if (parametersOffset > 0) {
|
||||
final int parameterCount = dexFile.getBuffer().readSmallUint(parametersOffset + TypeListItem.SIZE_OFFSET);
|
||||
final int parameterCount =
|
||||
dexFile.getDataBuffer().readSmallUint(parametersOffset + TypeListItem.SIZE_OFFSET);
|
||||
final int paramListStart = parametersOffset + TypeListItem.LIST_OFFSET;
|
||||
return new FixedSizeList<String>() {
|
||||
@Nonnull
|
||||
@Override
|
||||
public String readItem(final int index) {
|
||||
return dexFile.getTypeSection().get(dexFile.getBuffer().readUshort(paramListStart + 2*index));
|
||||
return dexFile.getTypeSection().get(dexFile.getDataBuffer().readUshort(paramListStart + 2*index));
|
||||
}
|
||||
@Override public int size() { return parameterCount; }
|
||||
};
|
||||
|
@ -65,7 +65,7 @@ public class DexBackedStringReference extends BaseStringReference {
|
||||
//add the string data length:
|
||||
int stringOffset = dexFile.getStringSection().getOffset(stringIndex);
|
||||
int stringDataOffset = dexFile.getBuffer().readSmallUint(stringOffset);
|
||||
DexReader reader = dexFile.getBuffer().readerAt(stringDataOffset);
|
||||
DexReader reader = dexFile.getDataBuffer().readerAt(stringDataOffset);
|
||||
size += reader.peekSmallUleb128Size();
|
||||
int utf16Length = reader.readSmallUleb128();
|
||||
//and string data itself:
|
||||
|
@ -99,12 +99,12 @@ public abstract class AnnotationsDirectory {
|
||||
public static Set<? extends DexBackedAnnotation> getAnnotations(@Nonnull final DexBackedDexFile dexFile,
|
||||
final int annotationSetOffset) {
|
||||
if (annotationSetOffset != 0) {
|
||||
final int size = dexFile.getBuffer().readSmallUint(annotationSetOffset);
|
||||
final int size = dexFile.getDataBuffer().readSmallUint(annotationSetOffset);
|
||||
return new FixedSizeSet<DexBackedAnnotation>() {
|
||||
@Nonnull
|
||||
@Override
|
||||
public DexBackedAnnotation readItem(int index) {
|
||||
int annotationOffset = dexFile.getBuffer().readSmallUint(annotationSetOffset + 4 + (4*index));
|
||||
int annotationOffset = dexFile.getDataBuffer().readSmallUint(annotationSetOffset + 4 + (4*index));
|
||||
return new DexBackedAnnotation(dexFile, annotationOffset);
|
||||
}
|
||||
|
||||
@ -119,13 +119,13 @@ public abstract class AnnotationsDirectory {
|
||||
public static List<Set<? extends DexBackedAnnotation>> getParameterAnnotations(
|
||||
@Nonnull final DexBackedDexFile dexFile, final int annotationSetListOffset) {
|
||||
if (annotationSetListOffset > 0) {
|
||||
final int size = dexFile.getBuffer().readSmallUint(annotationSetListOffset);
|
||||
final int size = dexFile.getDataBuffer().readSmallUint(annotationSetListOffset);
|
||||
|
||||
return new FixedSizeList<Set<? extends DexBackedAnnotation>>() {
|
||||
@Nonnull
|
||||
@Override
|
||||
public Set<? extends DexBackedAnnotation> readItem(int index) {
|
||||
int annotationSetOffset = dexFile.getBuffer().readSmallUint(
|
||||
int annotationSetOffset = dexFile.getDataBuffer().readSmallUint(
|
||||
annotationSetListOffset + 4 + index * 4);
|
||||
return getAnnotations(dexFile, annotationSetOffset);
|
||||
}
|
||||
@ -157,20 +157,20 @@ public abstract class AnnotationsDirectory {
|
||||
}
|
||||
|
||||
public int getFieldAnnotationCount() {
|
||||
return dexFile.getBuffer().readSmallUint(directoryOffset + FIELD_COUNT_OFFSET);
|
||||
return dexFile.getDataBuffer().readSmallUint(directoryOffset + FIELD_COUNT_OFFSET);
|
||||
}
|
||||
|
||||
public int getMethodAnnotationCount() {
|
||||
return dexFile.getBuffer().readSmallUint(directoryOffset + METHOD_COUNT_OFFSET);
|
||||
return dexFile.getDataBuffer().readSmallUint(directoryOffset + METHOD_COUNT_OFFSET);
|
||||
}
|
||||
|
||||
public int getParameterAnnotationCount() {
|
||||
return dexFile.getBuffer().readSmallUint(directoryOffset + PARAMETER_COUNT_OFFSET);
|
||||
return dexFile.getDataBuffer().readSmallUint(directoryOffset + PARAMETER_COUNT_OFFSET);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
public Set<? extends DexBackedAnnotation> getClassAnnotations() {
|
||||
return getAnnotations(dexFile, dexFile.getBuffer().readSmallUint(directoryOffset));
|
||||
return getAnnotations(dexFile, dexFile.getDataBuffer().readSmallUint(directoryOffset));
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@ -217,24 +217,24 @@ public abstract class AnnotationsDirectory {
|
||||
public AnnotationIteratorImpl(int startOffset, int size) {
|
||||
this.startOffset = startOffset;
|
||||
this.size = size;
|
||||
this.currentItemIndex = dexFile.getBuffer().readSmallUint(startOffset);
|
||||
this.currentItemIndex = dexFile.getDataBuffer().readSmallUint(startOffset);
|
||||
this.currentIndex = 0;
|
||||
}
|
||||
|
||||
public int seekTo(int itemIndex) {
|
||||
while (currentItemIndex < itemIndex && (currentIndex+1) < size) {
|
||||
currentIndex++;
|
||||
currentItemIndex = dexFile.getBuffer().readSmallUint(startOffset + (currentIndex*8));
|
||||
currentItemIndex = dexFile.getDataBuffer().readSmallUint(startOffset + (currentIndex*8));
|
||||
}
|
||||
|
||||
if (currentItemIndex == itemIndex) {
|
||||
return dexFile.getBuffer().readSmallUint(startOffset + (currentIndex*8)+4);
|
||||
return dexFile.getDataBuffer().readSmallUint(startOffset + (currentIndex*8)+4);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
this.currentItemIndex = dexFile.getBuffer().readSmallUint(startOffset);
|
||||
this.currentItemIndex = dexFile.getDataBuffer().readSmallUint(startOffset);
|
||||
this.currentIndex = 0;
|
||||
}
|
||||
}
|
||||
|
@ -114,7 +114,7 @@ public abstract class DebugInfo implements Iterable<DebugItem> {
|
||||
@Nonnull
|
||||
@Override
|
||||
public Iterator<DebugItem> iterator() {
|
||||
DexReader reader = dexFile.getBuffer().readerAt(debugInfoOffset);
|
||||
DexReader reader = dexFile.getDataBuffer().readerAt(debugInfoOffset);
|
||||
final int lineNumberStart = reader.readBigUleb128();
|
||||
int registerCount = methodImpl.getRegisterCount();
|
||||
|
||||
@ -166,7 +166,7 @@ public abstract class DebugInfo implements Iterable<DebugItem> {
|
||||
}
|
||||
}
|
||||
|
||||
return new VariableSizeLookaheadIterator<DebugItem>(dexFile, reader.getOffset()) {
|
||||
return new VariableSizeLookaheadIterator<DebugItem>(dexFile.getDataBuffer(), reader.getOffset()) {
|
||||
private int codeAddress = 0;
|
||||
private int lineNumber = lineNumberStart;
|
||||
|
||||
@ -282,7 +282,7 @@ public abstract class DebugInfo implements Iterable<DebugItem> {
|
||||
@Override
|
||||
public VariableSizeIterator<String> getParameterNames(@Nullable DexReader reader) {
|
||||
if (reader == null) {
|
||||
reader = dexFile.getBuffer().readerAt(debugInfoOffset);
|
||||
reader = dexFile.getDataBuffer().readerAt(debugInfoOffset);
|
||||
reader.skipUleb128();
|
||||
}
|
||||
//TODO: make sure dalvik doesn't allow more parameter names than we have parameters
|
||||
|
@ -68,7 +68,7 @@ public abstract class EncodedArrayItemIterator {
|
||||
|
||||
public EncodedArrayItemIteratorImpl(@Nonnull DexBackedDexFile dexFile, int offset) {
|
||||
this.dexFile = dexFile;
|
||||
this.reader = dexFile.getBuffer().readerAt(offset);
|
||||
this.reader = dexFile.getDataBuffer().readerAt(offset);
|
||||
this.size = reader.readSmallUleb128();
|
||||
}
|
||||
|
||||
|
@ -31,19 +31,19 @@
|
||||
|
||||
package org.jf.dexlib2.dexbacked.util;
|
||||
|
||||
import org.jf.dexlib2.dexbacked.DexBackedDexFile;
|
||||
import org.jf.dexlib2.dexbacked.DexBuffer;
|
||||
import org.jf.dexlib2.dexbacked.DexReader;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.AbstractCollection;
|
||||
|
||||
public abstract class VariableSizeCollection<T> extends AbstractCollection<T> {
|
||||
@Nonnull private final DexBackedDexFile dexFile;
|
||||
@Nonnull private final DexBuffer buffer;
|
||||
private final int offset;
|
||||
private final int size;
|
||||
|
||||
public VariableSizeCollection(@Nonnull DexBackedDexFile dexFile, int offset, int size) {
|
||||
this.dexFile = dexFile;
|
||||
public VariableSizeCollection(@Nonnull DexBuffer buffer, int offset, int size) {
|
||||
this.buffer = buffer;
|
||||
this.offset = offset;
|
||||
this.size = size;
|
||||
}
|
||||
@ -53,7 +53,7 @@ public abstract class VariableSizeCollection<T> extends AbstractCollection<T> {
|
||||
@Override
|
||||
@Nonnull
|
||||
public VariableSizeIterator<T> iterator() {
|
||||
return new VariableSizeIterator<T>(dexFile, offset, size) {
|
||||
return new VariableSizeIterator<T>(buffer, offset, size) {
|
||||
@Override
|
||||
protected T readNextItem(@Nonnull DexReader reader, int index) {
|
||||
return VariableSizeCollection.this.readNextItem(reader, index);
|
||||
|
@ -31,7 +31,7 @@
|
||||
|
||||
package org.jf.dexlib2.dexbacked.util;
|
||||
|
||||
import org.jf.dexlib2.dexbacked.DexBackedDexFile;
|
||||
import org.jf.dexlib2.dexbacked.DexBuffer;
|
||||
import org.jf.dexlib2.dexbacked.DexReader;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
@ -44,8 +44,8 @@ public abstract class VariableSizeIterator<T> implements Iterator<T> {
|
||||
|
||||
private int index;
|
||||
|
||||
protected VariableSizeIterator(@Nonnull DexBackedDexFile dexFile, int offset, int size) {
|
||||
this.reader = dexFile.getBuffer().readerAt(offset);
|
||||
protected VariableSizeIterator(@Nonnull DexBuffer buffer, int offset, int size) {
|
||||
this.reader = buffer.readerAt(offset);
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
|
@ -31,19 +31,19 @@
|
||||
|
||||
package org.jf.dexlib2.dexbacked.util;
|
||||
|
||||
import org.jf.dexlib2.dexbacked.DexBackedDexFile;
|
||||
import org.jf.dexlib2.dexbacked.DexBuffer;
|
||||
import org.jf.dexlib2.dexbacked.DexReader;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.AbstractSequentialList;
|
||||
|
||||
public abstract class VariableSizeList<T> extends AbstractSequentialList<T> {
|
||||
@Nonnull private final DexBackedDexFile dexFile;
|
||||
@Nonnull private final DexBuffer buffer;
|
||||
private final int offset;
|
||||
private final int size;
|
||||
|
||||
public VariableSizeList(@Nonnull DexBackedDexFile dexFile, int offset, int size) {
|
||||
this.dexFile = dexFile;
|
||||
public VariableSizeList(@Nonnull DexBuffer buffer, int offset, int size) {
|
||||
this.buffer = buffer;
|
||||
this.offset = offset;
|
||||
this.size = size;
|
||||
}
|
||||
@ -61,7 +61,7 @@ public abstract class VariableSizeList<T> extends AbstractSequentialList<T> {
|
||||
@Nonnull
|
||||
@Override
|
||||
public VariableSizeListIterator<T> listIterator(int index) {
|
||||
VariableSizeListIterator<T> iterator = new VariableSizeListIterator<T>(dexFile, offset, size) {
|
||||
VariableSizeListIterator<T> iterator = new VariableSizeListIterator<T>(buffer, offset, size) {
|
||||
@Override
|
||||
protected T readNextItem(@Nonnull DexReader reader, int index) {
|
||||
return VariableSizeList.this.readNextItem(reader, index);
|
||||
|
@ -31,7 +31,7 @@
|
||||
|
||||
package org.jf.dexlib2.dexbacked.util;
|
||||
|
||||
import org.jf.dexlib2.dexbacked.DexBackedDexFile;
|
||||
import org.jf.dexlib2.dexbacked.DexBuffer;
|
||||
import org.jf.dexlib2.dexbacked.DexReader;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
@ -45,8 +45,8 @@ public abstract class VariableSizeListIterator<T> implements ListIterator<T> {
|
||||
|
||||
private int index;
|
||||
|
||||
protected VariableSizeListIterator(@Nonnull DexBackedDexFile dexFile, int offset, int size) {
|
||||
this.reader = dexFile.getBuffer().readerAt(offset);
|
||||
protected VariableSizeListIterator(@Nonnull DexBuffer buffer, int offset, int size) {
|
||||
this.reader = buffer.readerAt(offset);
|
||||
this.startOffset = offset;
|
||||
this.size = size;
|
||||
}
|
||||
|
@ -32,7 +32,7 @@
|
||||
package org.jf.dexlib2.dexbacked.util;
|
||||
|
||||
import com.google.common.collect.AbstractIterator;
|
||||
import org.jf.dexlib2.dexbacked.DexBackedDexFile;
|
||||
import org.jf.dexlib2.dexbacked.DexBuffer;
|
||||
import org.jf.dexlib2.dexbacked.DexReader;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
@ -42,8 +42,8 @@ import java.util.Iterator;
|
||||
public abstract class VariableSizeLookaheadIterator<T> extends AbstractIterator<T> implements Iterator<T> {
|
||||
@Nonnull private final DexReader reader;
|
||||
|
||||
protected VariableSizeLookaheadIterator(@Nonnull DexBackedDexFile dexFile, int offset) {
|
||||
this.reader = dexFile.getBuffer().readerAt(offset);
|
||||
protected VariableSizeLookaheadIterator(@Nonnull DexBuffer buffer, int offset) {
|
||||
this.reader = buffer.readerAt(offset);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -31,19 +31,19 @@
|
||||
|
||||
package org.jf.dexlib2.dexbacked.util;
|
||||
|
||||
import org.jf.dexlib2.dexbacked.DexBackedDexFile;
|
||||
import org.jf.dexlib2.dexbacked.DexBuffer;
|
||||
import org.jf.dexlib2.dexbacked.DexReader;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.AbstractSet;
|
||||
|
||||
public abstract class VariableSizeSet<T> extends AbstractSet<T> {
|
||||
@Nonnull private final DexBackedDexFile dexFile;
|
||||
@Nonnull private final DexBuffer buffer;
|
||||
private final int offset;
|
||||
private final int size;
|
||||
|
||||
public VariableSizeSet(@Nonnull DexBackedDexFile dexFile, int offset, int size) {
|
||||
this.dexFile = dexFile;
|
||||
public VariableSizeSet(@Nonnull DexBuffer buffer, int offset, int size) {
|
||||
this.buffer = buffer;
|
||||
this.offset = offset;
|
||||
this.size = size;
|
||||
}
|
||||
@ -53,7 +53,7 @@ public abstract class VariableSizeSet<T> extends AbstractSet<T> {
|
||||
@Override
|
||||
@Nonnull
|
||||
public VariableSizeIterator<T> iterator() {
|
||||
return new VariableSizeIterator<T>(dexFile, offset, size) {
|
||||
return new VariableSizeIterator<T>(buffer, offset, size) {
|
||||
@Override
|
||||
protected T readNextItem(@Nonnull DexReader reader, int index) {
|
||||
return VariableSizeSet.this.readNextItem(reader, index);
|
||||
|
@ -73,7 +73,7 @@ public class DexBackedAnnotationEncodedValue extends BaseAnnotationEncodedValue
|
||||
@Nonnull
|
||||
@Override
|
||||
public Set<? extends DexBackedAnnotationElement> getElements() {
|
||||
return new VariableSizeSet<DexBackedAnnotationElement>(dexFile, elementsOffset, elementCount) {
|
||||
return new VariableSizeSet<DexBackedAnnotationElement>(dexFile.getDataBuffer(), elementsOffset, elementCount) {
|
||||
@Nonnull
|
||||
@Override
|
||||
protected DexBackedAnnotationElement readNextItem(@Nonnull DexReader dexReader, int index) {
|
||||
|
@ -67,7 +67,7 @@ public class DexBackedArrayEncodedValue extends BaseArrayEncodedValue implements
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<? extends EncodedValue> getValue() {
|
||||
return new VariableSizeList<EncodedValue>(dexFile, encodedArrayOffset, elementCount) {
|
||||
return new VariableSizeList<EncodedValue>(dexFile.getDataBuffer(), encodedArrayOffset, elementCount) {
|
||||
@Nonnull
|
||||
@Override
|
||||
protected EncodedValue readNextItem(@Nonnull DexReader dexReader, int index) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user