mirror of
https://github.com/revanced/smali.git
synced 2025-05-29 20:20:12 +02:00
Move structure offset constants into raw classes
This commit is contained in:
parent
c5abfe4cea
commit
e8158c86ef
@ -33,6 +33,7 @@ package org.jf.dexlib2.dexbacked;
|
|||||||
|
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import org.jf.dexlib2.base.reference.BaseTypeReference;
|
import org.jf.dexlib2.base.reference.BaseTypeReference;
|
||||||
|
import org.jf.dexlib2.dexbacked.raw.ClassDefItem;
|
||||||
import org.jf.dexlib2.dexbacked.util.AnnotationsDirectory;
|
import org.jf.dexlib2.dexbacked.util.AnnotationsDirectory;
|
||||||
import org.jf.dexlib2.dexbacked.util.FixedSizeSet;
|
import org.jf.dexlib2.dexbacked.util.FixedSizeSet;
|
||||||
import org.jf.dexlib2.dexbacked.util.StaticInitialValueIterator;
|
import org.jf.dexlib2.dexbacked.util.StaticInitialValueIterator;
|
||||||
@ -53,16 +54,6 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
|||||||
|
|
||||||
@Nullable private AnnotationsDirectory annotationsDirectory;
|
@Nullable private AnnotationsDirectory annotationsDirectory;
|
||||||
|
|
||||||
//class_def_item offsets
|
|
||||||
private static final int CLASS_NAME_OFFSET = 0;
|
|
||||||
private static final int ACCESS_FLAGS_OFFSET = 4;
|
|
||||||
private static final int SUPERCLASS_OFFSET = 8;
|
|
||||||
private static final int INTERFACES_OFFSET = 12;
|
|
||||||
private static final int SOURCE_FILE_OFFSET = 16;
|
|
||||||
private static final int ANNOTATIONS_OFFSET = 20;
|
|
||||||
private static final int CLASS_DATA_OFFSET = 24;
|
|
||||||
private static final int STATIC_INITIAL_VALUES_OFFSET = 28;
|
|
||||||
|
|
||||||
public DexBackedClassDef(@Nonnull DexBackedDexFile dexFile,
|
public DexBackedClassDef(@Nonnull DexBackedDexFile dexFile,
|
||||||
int classDefOffset) {
|
int classDefOffset) {
|
||||||
this.dexFile = dexFile;
|
this.dexFile = dexFile;
|
||||||
@ -72,30 +63,30 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
|||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public String getType() {
|
public String getType() {
|
||||||
return dexFile.getType(dexFile.readSmallUint(classDefOffset + CLASS_NAME_OFFSET));
|
return dexFile.getType(dexFile.readSmallUint(classDefOffset + ClassDefItem.CLASS_OFFSET));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public String getSuperclass() {
|
public String getSuperclass() {
|
||||||
return dexFile.getOptionalType(dexFile.readOptionalUint(classDefOffset + SUPERCLASS_OFFSET));
|
return dexFile.getOptionalType(dexFile.readOptionalUint(classDefOffset + ClassDefItem.SUPERCLASS_OFFSET));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAccessFlags() {
|
public int getAccessFlags() {
|
||||||
return dexFile.readSmallUint(classDefOffset + ACCESS_FLAGS_OFFSET);
|
return dexFile.readSmallUint(classDefOffset + ClassDefItem.ACCESS_FLAGS_OFFSET);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public String getSourceFile() {
|
public String getSourceFile() {
|
||||||
return dexFile.getOptionalString(dexFile.readOptionalUint(classDefOffset + SOURCE_FILE_OFFSET));
|
return dexFile.getOptionalString(dexFile.readOptionalUint(classDefOffset + ClassDefItem.SOURCE_FILE_OFFSET));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public Set<String> getInterfaces() {
|
public Set<String> getInterfaces() {
|
||||||
final int interfacesOffset = dexFile.readSmallUint(classDefOffset + INTERFACES_OFFSET);
|
final int interfacesOffset = dexFile.readSmallUint(classDefOffset + ClassDefItem.INTERFACES_OFFSET);
|
||||||
if (interfacesOffset > 0) {
|
if (interfacesOffset > 0) {
|
||||||
final int size = dexFile.readSmallUint(interfacesOffset);
|
final int size = dexFile.readSmallUint(interfacesOffset);
|
||||||
return new FixedSizeSet<String>() {
|
return new FixedSizeSet<String>() {
|
||||||
@ -132,7 +123,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
|||||||
|
|
||||||
final AnnotationsDirectory annotationsDirectory = getAnnotationsDirectory();
|
final AnnotationsDirectory annotationsDirectory = getAnnotationsDirectory();
|
||||||
final int staticInitialValuesOffset =
|
final int staticInitialValuesOffset =
|
||||||
dexFile.readSmallUint(classDefOffset + STATIC_INITIAL_VALUES_OFFSET);
|
dexFile.readSmallUint(classDefOffset + ClassDefItem.STATIC_VALUES_OFFSET);
|
||||||
final int fieldsStartOffset = reader.getOffset();
|
final int fieldsStartOffset = reader.getOffset();
|
||||||
|
|
||||||
return new AbstractSet<DexBackedField>() {
|
return new AbstractSet<DexBackedField>() {
|
||||||
@ -225,14 +216,14 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
|||||||
|
|
||||||
private int getClassDataOffset() {
|
private int getClassDataOffset() {
|
||||||
if (classDataOffset == -1) {
|
if (classDataOffset == -1) {
|
||||||
classDataOffset = dexFile.readSmallUint(classDefOffset + CLASS_DATA_OFFSET);
|
classDataOffset = dexFile.readSmallUint(classDefOffset + ClassDefItem.CLASS_DATA_OFFSET);
|
||||||
}
|
}
|
||||||
return classDataOffset;
|
return classDataOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
private AnnotationsDirectory getAnnotationsDirectory() {
|
private AnnotationsDirectory getAnnotationsDirectory() {
|
||||||
if (annotationsDirectory == null) {
|
if (annotationsDirectory == null) {
|
||||||
int annotationsDirectoryOffset = dexFile.readSmallUint(classDefOffset + ANNOTATIONS_OFFSET);
|
int annotationsDirectoryOffset = dexFile.readSmallUint(classDefOffset + ClassDefItem.ANNOTATIONS_OFFSET);
|
||||||
annotationsDirectory = AnnotationsDirectory.newOrEmpty(dexFile, annotationsDirectoryOffset);
|
annotationsDirectory = AnnotationsDirectory.newOrEmpty(dexFile, annotationsDirectoryOffset);
|
||||||
}
|
}
|
||||||
return annotationsDirectory;
|
return annotationsDirectory;
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
package org.jf.dexlib2.dexbacked;
|
package org.jf.dexlib2.dexbacked;
|
||||||
|
|
||||||
import org.jf.dexlib2.base.reference.BaseFieldReference;
|
import org.jf.dexlib2.base.reference.BaseFieldReference;
|
||||||
|
import org.jf.dexlib2.dexbacked.raw.FieldIdItem;
|
||||||
import org.jf.dexlib2.dexbacked.util.AnnotationsDirectory;
|
import org.jf.dexlib2.dexbacked.util.AnnotationsDirectory;
|
||||||
import org.jf.dexlib2.dexbacked.util.StaticInitialValueIterator;
|
import org.jf.dexlib2.dexbacked.util.StaticInitialValueIterator;
|
||||||
import org.jf.dexlib2.iface.ClassDef;
|
import org.jf.dexlib2.iface.ClassDef;
|
||||||
@ -54,10 +55,6 @@ public class DexBackedField extends BaseFieldReference implements Field {
|
|||||||
|
|
||||||
private int fieldIdItemOffset;
|
private int fieldIdItemOffset;
|
||||||
|
|
||||||
// offsets for field_id_item
|
|
||||||
private static final int TYPE_OFFSET = 2;
|
|
||||||
private static final int NAME_OFFSET = 4;
|
|
||||||
|
|
||||||
public DexBackedField(@Nonnull DexReader reader,
|
public DexBackedField(@Nonnull DexReader reader,
|
||||||
@Nonnull DexBackedClassDef classDef,
|
@Nonnull DexBackedClassDef classDef,
|
||||||
int previousFieldIndex,
|
int previousFieldIndex,
|
||||||
@ -77,13 +74,13 @@ public class DexBackedField extends BaseFieldReference implements Field {
|
|||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return dexFile.getString(dexFile.readSmallUint(getFieldIdItemOffset() + NAME_OFFSET));
|
return dexFile.getString(dexFile.readSmallUint(getFieldIdItemOffset() + FieldIdItem.NAME_OFFSET));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public String getType() {
|
public String getType() {
|
||||||
return dexFile.getType(dexFile.readUshort(getFieldIdItemOffset() + TYPE_OFFSET));
|
return dexFile.getType(dexFile.readUshort(getFieldIdItemOffset() + FieldIdItem.TYPE_OFFSET));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull @Override public String getDefiningClass() { return classDef.getType(); }
|
@Nonnull @Override public String getDefiningClass() { return classDef.getType(); }
|
||||||
|
@ -34,6 +34,8 @@ package org.jf.dexlib2.dexbacked;
|
|||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.Iterators;
|
import com.google.common.collect.Iterators;
|
||||||
import org.jf.dexlib2.base.reference.BaseMethodReference;
|
import org.jf.dexlib2.base.reference.BaseMethodReference;
|
||||||
|
import org.jf.dexlib2.dexbacked.raw.MethodIdItem;
|
||||||
|
import org.jf.dexlib2.dexbacked.raw.ProtoIdItem;
|
||||||
import org.jf.dexlib2.dexbacked.raw.TypeListItem;
|
import org.jf.dexlib2.dexbacked.raw.TypeListItem;
|
||||||
import org.jf.dexlib2.dexbacked.util.AnnotationsDirectory;
|
import org.jf.dexlib2.dexbacked.util.AnnotationsDirectory;
|
||||||
import org.jf.dexlib2.dexbacked.util.FixedSizeList;
|
import org.jf.dexlib2.dexbacked.util.FixedSizeList;
|
||||||
@ -65,14 +67,6 @@ public class DexBackedMethod extends BaseMethodReference implements Method {
|
|||||||
private int protoIdItemOffset;
|
private int protoIdItemOffset;
|
||||||
private int parametersOffset = -1;
|
private int parametersOffset = -1;
|
||||||
|
|
||||||
// method_id_item offsets
|
|
||||||
private static final int PROTO_OFFSET = 2;
|
|
||||||
private static final int NAME_OFFSET = 4;
|
|
||||||
|
|
||||||
// proto_id_item offsets
|
|
||||||
private static final int RETURN_TYPE_OFFSET = 4;
|
|
||||||
private static final int PARAMETERS_OFFSET = 8;
|
|
||||||
|
|
||||||
public DexBackedMethod(@Nonnull DexReader reader,
|
public DexBackedMethod(@Nonnull DexReader reader,
|
||||||
@Nonnull DexBackedClassDef classDef,
|
@Nonnull DexBackedClassDef classDef,
|
||||||
int previousMethodIndex) {
|
int previousMethodIndex) {
|
||||||
@ -112,13 +106,13 @@ public class DexBackedMethod extends BaseMethodReference implements Method {
|
|||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return dexFile.getString(dexFile.readSmallUint(getMethodIdItemOffset() + NAME_OFFSET));
|
return dexFile.getString(dexFile.readSmallUint(getMethodIdItemOffset() + MethodIdItem.NAME_OFFSET));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public String getReturnType() {
|
public String getReturnType() {
|
||||||
return dexFile.getType(dexFile.readSmallUint(getProtoIdItemOffset() + RETURN_TYPE_OFFSET));
|
return dexFile.getType(dexFile.readSmallUint(getProtoIdItemOffset() + ProtoIdItem.RETURN_TYPE_OFFSET));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@ -200,7 +194,7 @@ public class DexBackedMethod extends BaseMethodReference implements Method {
|
|||||||
|
|
||||||
private int getProtoIdItemOffset() {
|
private int getProtoIdItemOffset() {
|
||||||
if (protoIdItemOffset == 0) {
|
if (protoIdItemOffset == 0) {
|
||||||
int protoIndex = dexFile.readUshort(getMethodIdItemOffset() + PROTO_OFFSET);
|
int protoIndex = dexFile.readUshort(getMethodIdItemOffset() + MethodIdItem.PROTO_OFFSET);
|
||||||
protoIdItemOffset = dexFile.getProtoIdItemOffset(protoIndex);
|
protoIdItemOffset = dexFile.getProtoIdItemOffset(protoIndex);
|
||||||
}
|
}
|
||||||
return protoIdItemOffset;
|
return protoIdItemOffset;
|
||||||
@ -208,7 +202,7 @@ public class DexBackedMethod extends BaseMethodReference implements Method {
|
|||||||
|
|
||||||
private int getParametersOffset() {
|
private int getParametersOffset() {
|
||||||
if (parametersOffset == -1) {
|
if (parametersOffset == -1) {
|
||||||
parametersOffset = dexFile.readSmallUint(getProtoIdItemOffset() + PARAMETERS_OFFSET);
|
parametersOffset = dexFile.readSmallUint(getProtoIdItemOffset() + ProtoIdItem.PARAMETERS_OFFSET);
|
||||||
}
|
}
|
||||||
return parametersOffset;
|
return parametersOffset;
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ package org.jf.dexlib2.dexbacked;
|
|||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import org.jf.dexlib2.dexbacked.instruction.DexBackedInstruction;
|
import org.jf.dexlib2.dexbacked.instruction.DexBackedInstruction;
|
||||||
|
import org.jf.dexlib2.dexbacked.raw.CodeItem;
|
||||||
import org.jf.dexlib2.dexbacked.util.DebugInfo;
|
import org.jf.dexlib2.dexbacked.util.DebugInfo;
|
||||||
import org.jf.dexlib2.dexbacked.util.FixedSizeList;
|
import org.jf.dexlib2.dexbacked.util.FixedSizeList;
|
||||||
import org.jf.dexlib2.dexbacked.util.VariableSizeLookaheadIterator;
|
import org.jf.dexlib2.dexbacked.util.VariableSizeLookaheadIterator;
|
||||||
@ -52,14 +53,6 @@ public class DexBackedMethodImplementation implements MethodImplementation {
|
|||||||
@Nonnull public final DexBackedMethod method;
|
@Nonnull public final DexBackedMethod method;
|
||||||
private final int codeOffset;
|
private final int codeOffset;
|
||||||
|
|
||||||
// code_item offsets
|
|
||||||
private static final int TRIES_SIZE_OFFSET = 6;
|
|
||||||
private static final int DEBUG_OFFSET_OFFSET = 8;
|
|
||||||
private static final int INSTRUCTIONS_SIZE_OFFSET = 12;
|
|
||||||
private static final int INSTRUCTIONS_START_OFFSET = 16;
|
|
||||||
|
|
||||||
private static final int TRY_ITEM_SIZE = 8;
|
|
||||||
|
|
||||||
public DexBackedMethodImplementation(@Nonnull DexBackedDexFile dexFile,
|
public DexBackedMethodImplementation(@Nonnull DexBackedDexFile dexFile,
|
||||||
@Nonnull DexBackedMethod method,
|
@Nonnull DexBackedMethod method,
|
||||||
int codeOffset) {
|
int codeOffset) {
|
||||||
@ -72,9 +65,9 @@ public class DexBackedMethodImplementation implements MethodImplementation {
|
|||||||
|
|
||||||
@Nonnull @Override public Iterable<? extends Instruction> getInstructions() {
|
@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
|
// instructionsSize is the number of 16-bit code units in the instruction list, not the number of instructions
|
||||||
int instructionsSize = dexFile.readSmallUint(codeOffset + INSTRUCTIONS_SIZE_OFFSET);
|
int instructionsSize = dexFile.readSmallUint(codeOffset + CodeItem.INSTRUCTION_COUNT_OFFSET);
|
||||||
|
|
||||||
final int instructionsStartOffset = codeOffset + INSTRUCTIONS_START_OFFSET;
|
final int instructionsStartOffset = codeOffset + CodeItem.INSTRUCTION_START_OFFSET;
|
||||||
final int endOffset = instructionsStartOffset + (instructionsSize*2);
|
final int endOffset = instructionsStartOffset + (instructionsSize*2);
|
||||||
return new Iterable<Instruction>() {
|
return new Iterable<Instruction>() {
|
||||||
@Override
|
@Override
|
||||||
@ -96,19 +89,19 @@ public class DexBackedMethodImplementation implements MethodImplementation {
|
|||||||
@Override
|
@Override
|
||||||
public List<? extends TryBlock> getTryBlocks() {
|
public List<? extends TryBlock> getTryBlocks() {
|
||||||
// TODO: provide utility to put try blocks into a "canonical", easy to use format, which more closely matches java's try blocks
|
// TODO: provide utility to put try blocks into a "canonical", easy to use format, which more closely matches java's try blocks
|
||||||
final int triesSize = dexFile.readUshort(codeOffset + TRIES_SIZE_OFFSET);
|
final int triesSize = dexFile.readUshort(codeOffset + CodeItem.TRIES_SIZE_OFFSET);
|
||||||
if (triesSize > 0) {
|
if (triesSize > 0) {
|
||||||
int instructionsSize = dexFile.readSmallUint(codeOffset + INSTRUCTIONS_SIZE_OFFSET);
|
int instructionsSize = dexFile.readSmallUint(codeOffset + CodeItem.INSTRUCTION_COUNT_OFFSET);
|
||||||
final int triesStartOffset = AlignmentUtils.alignOffset(
|
final int triesStartOffset = AlignmentUtils.alignOffset(
|
||||||
codeOffset + INSTRUCTIONS_START_OFFSET + (instructionsSize*2), 4);
|
codeOffset + CodeItem.INSTRUCTION_START_OFFSET + (instructionsSize*2), 4);
|
||||||
final int handlersStartOffset = triesStartOffset + triesSize*TRY_ITEM_SIZE;
|
final int handlersStartOffset = triesStartOffset + triesSize*CodeItem.TryItem.ITEM_SIZE;
|
||||||
|
|
||||||
return new FixedSizeList<TryBlock>() {
|
return new FixedSizeList<TryBlock>() {
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public TryBlock readItem(int index) {
|
public TryBlock readItem(int index) {
|
||||||
return new DexBackedTryBlock(dexFile,
|
return new DexBackedTryBlock(dexFile,
|
||||||
triesStartOffset + index*TRY_ITEM_SIZE,
|
triesStartOffset + index*CodeItem.TryItem.ITEM_SIZE,
|
||||||
handlersStartOffset);
|
handlersStartOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,7 +116,7 @@ public class DexBackedMethodImplementation implements MethodImplementation {
|
|||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
private DebugInfo getDebugInfo() {
|
private DebugInfo getDebugInfo() {
|
||||||
return DebugInfo.newOrEmpty(dexFile, dexFile.readSmallUint(codeOffset + DEBUG_OFFSET_OFFSET), this);
|
return DebugInfo.newOrEmpty(dexFile, dexFile.readSmallUint(codeOffset + CodeItem.DEBUG_INFO_OFFSET), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull @Override
|
@Nonnull @Override
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
package org.jf.dexlib2.dexbacked;
|
package org.jf.dexlib2.dexbacked;
|
||||||
|
|
||||||
|
import org.jf.dexlib2.dexbacked.raw.CodeItem;
|
||||||
import org.jf.dexlib2.dexbacked.util.VariableSizeList;
|
import org.jf.dexlib2.dexbacked.util.VariableSizeList;
|
||||||
import org.jf.dexlib2.iface.ExceptionHandler;
|
import org.jf.dexlib2.iface.ExceptionHandler;
|
||||||
import org.jf.dexlib2.iface.TryBlock;
|
import org.jf.dexlib2.iface.TryBlock;
|
||||||
@ -43,9 +44,7 @@ public class DexBackedTryBlock implements TryBlock {
|
|||||||
private final int tryItemOffset;
|
private final int tryItemOffset;
|
||||||
private final int handlersStartOffset;
|
private final int handlersStartOffset;
|
||||||
|
|
||||||
private static final int START_ADDRESS_OFFSET = 0;
|
|
||||||
private static final int CODE_UNIT_COUNT_OFFSET = 4;
|
|
||||||
private static final int HANDLER_OFFSET_OFFSET = 6;
|
|
||||||
|
|
||||||
public DexBackedTryBlock(@Nonnull DexBackedDexFile dexFile,
|
public DexBackedTryBlock(@Nonnull DexBackedDexFile dexFile,
|
||||||
int tryItemOffset,
|
int tryItemOffset,
|
||||||
@ -55,14 +54,19 @@ public class DexBackedTryBlock implements TryBlock {
|
|||||||
this.handlersStartOffset = handlersStartOffset;
|
this.handlersStartOffset = handlersStartOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public int getStartCodeAddress() { return dexFile.readSmallUint(tryItemOffset + START_ADDRESS_OFFSET); }
|
@Override public int getStartCodeAddress() {
|
||||||
@Override public int getCodeUnitCount() { return dexFile.readUshort(tryItemOffset + CODE_UNIT_COUNT_OFFSET); }
|
return dexFile.readSmallUint(tryItemOffset + CodeItem.TryItem.START_ADDRESS_OFFSET);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public int getCodeUnitCount() {
|
||||||
|
return dexFile.readUshort(tryItemOffset + CodeItem.TryItem.CODE_UNIT_COUNT_OFFSET);
|
||||||
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public List<? extends ExceptionHandler> getExceptionHandlers() {
|
public List<? extends ExceptionHandler> getExceptionHandlers() {
|
||||||
DexReader reader =
|
DexReader reader = dexFile.readerAt(
|
||||||
dexFile.readerAt(handlersStartOffset + dexFile.readUshort(tryItemOffset + HANDLER_OFFSET_OFFSET));
|
handlersStartOffset + dexFile.readUshort(tryItemOffset + CodeItem.TryItem.HANDLER_OFFSET));
|
||||||
final int encodedSize = reader.readSleb128();
|
final int encodedSize = reader.readSleb128();
|
||||||
|
|
||||||
if (encodedSize > 0) {
|
if (encodedSize > 0) {
|
||||||
|
@ -50,9 +50,18 @@ public class CodeItem {
|
|||||||
public static final int REGISTERS_OFFSET = 0;
|
public static final int REGISTERS_OFFSET = 0;
|
||||||
public static final int INS_OFFSET = 2;
|
public static final int INS_OFFSET = 2;
|
||||||
public static final int OUTS_OFFSET = 4;
|
public static final int OUTS_OFFSET = 4;
|
||||||
public static final int TRIES_OFFSET = 6;
|
public static final int TRIES_SIZE_OFFSET = 6;
|
||||||
public static final int DEBUG_INFO_OFFSET = 8;
|
public static final int DEBUG_INFO_OFFSET = 8;
|
||||||
public static final int INSTRUCTION_COUNT_OFFSET = 12;
|
public static final int INSTRUCTION_COUNT_OFFSET = 12;
|
||||||
|
public static final int INSTRUCTION_START_OFFSET = 16;
|
||||||
|
|
||||||
|
public static class TryItem {
|
||||||
|
public static final int ITEM_SIZE = 8;
|
||||||
|
|
||||||
|
public static final int START_ADDRESS_OFFSET = 0;
|
||||||
|
public static final int CODE_UNIT_COUNT_OFFSET = 4;
|
||||||
|
public static final int HANDLER_OFFSET = 6;
|
||||||
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
public static SectionAnnotator makeAnnotator(@Nonnull DexAnnotator annotator, @Nonnull MapItem mapItem) {
|
public static SectionAnnotator makeAnnotator(@Nonnull DexAnnotator annotator, @Nonnull MapItem mapItem) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user