From 7904ec2a7c1b0c782f4184ef54354f79d2644624 Mon Sep 17 00:00:00 2001 From: Connor Tumbleson Date: Thu, 20 Jun 2013 08:46:08 -0500 Subject: [PATCH] dexlib2: ported "dontLoadClassPath feature" --- .../src/main/java/org/jf/dexlib2/analysis/ClassPath.java | 6 ++++++ .../main/java/org/jf/dexlib2/analysis/MethodAnalyzer.java | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassPath.java b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassPath.java index e7081523..241614d4 100644 --- a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassPath.java +++ b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassPath.java @@ -55,6 +55,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; public class ClassPath { + public static boolean dontLoadClassPath = false; + @Nonnull private final TypeProto unknownClass; @Nonnull private HashMap availableClasses = Maps.newHashMap(); private int api; @@ -136,6 +138,10 @@ public class ClassPath { @Nonnull public ClassDef getClassDef(String type) { + if (dontLoadClassPath) { + return null; + } + ClassDef ret = availableClasses.get(type); if (ret == null) { throw new UnresolvedClassException("Could not resolve class %s", type); diff --git a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/analysis/MethodAnalyzer.java b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/analysis/MethodAnalyzer.java index 2a779efa..fc2d2b9f 100644 --- a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/analysis/MethodAnalyzer.java +++ b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/analysis/MethodAnalyzer.java @@ -1162,7 +1162,7 @@ public class MethodAnalyzer { ThreeRegisterInstruction instruction = (ThreeRegisterInstruction)analyzedInstruction.instruction; RegisterType arrayRegisterType = analyzedInstruction.getPreInstructionRegisterType(instruction.getRegisterB()); - if (arrayRegisterType.category != RegisterType.NULL) { + if (! ClassPath.dontLoadClassPath && arrayRegisterType.category != RegisterType.NULL) { if (arrayRegisterType.category != RegisterType.REFERENCE || !(arrayRegisterType.type instanceof ArrayProto)) { throw new AnalysisException("aget-wide used with non-array register: %s", arrayRegisterType.toString()); @@ -1193,7 +1193,7 @@ public class MethodAnalyzer { ThreeRegisterInstruction instruction = (ThreeRegisterInstruction)analyzedInstruction.instruction; RegisterType arrayRegisterType = analyzedInstruction.getPreInstructionRegisterType(instruction.getRegisterB()); - if (arrayRegisterType.category != RegisterType.NULL) { + if (! ClassPath.dontLoadClassPath && arrayRegisterType.category != RegisterType.NULL) { if (arrayRegisterType.category != RegisterType.REFERENCE || !(arrayRegisterType.type instanceof ArrayProto)) { throw new AnalysisException("aget-object used with non-array register: %s",