diff options
author | Ben Gruver <bgruv@google.com> | 2016-09-18 11:23:26 -0700 |
---|---|---|
committer | Ben Gruver <bgruv@google.com> | 2016-09-19 09:08:53 -0700 |
commit | fb10b5731c9b88c1aed0dfa7621dd6648f7a77fe (patch) | |
tree | 8910382e09e0ff053daa599686b56bf5e8e3e137 /baksmali | |
parent | 7e8afc4d8aee82cbab27abca6f5136df636dfbea (diff) | |
download | smali-fb10b5731c9b88c1aed0dfa7621dd6648f7a77fe.tar.gz |
Add AnalysisArguments.loadClassPathForDexFile
Diffstat (limited to 'baksmali')
4 files changed, 20 insertions, 17 deletions
diff --git a/baksmali/src/main/java/org/jf/baksmali/AnalysisArguments.java b/baksmali/src/main/java/org/jf/baksmali/AnalysisArguments.java index 008ec460..5198803c 100644 --- a/baksmali/src/main/java/org/jf/baksmali/AnalysisArguments.java +++ b/baksmali/src/main/java/org/jf/baksmali/AnalysisArguments.java @@ -33,9 +33,13 @@ package org.jf.baksmali; import com.beust.jcommander.Parameter; import com.google.common.collect.Lists; +import org.jf.dexlib2.analysis.ClassPath; +import org.jf.dexlib2.iface.DexFile; import org.jf.util.jcommander.ColonParameterSplitter; import org.jf.util.jcommander.ExtendedParameter; +import javax.annotation.Nonnull; +import java.io.IOException; import java.util.List; public class AnalysisArguments { @@ -45,17 +49,17 @@ public class AnalysisArguments { public int apiLevel = 15; @Parameter(names = {"-b", "--bootclasspath", "--bcp"}, - description = "A colon separated list of the jar/oat files to include in the " + - "bootclasspath when analyzing the dex file. If not specified, baksmali will attempt to choose an " + - "appropriate default. This is analogous to Android's BOOTCLASSPATH environment variable.", + description = "A colon separated list of the files to include in the bootclasspath when analyzing the dex " + + "file. If not specified, baksmali will attempt to choose an " + + "appropriate default. When analyzing oat files, this can simply be the path to the device's " + + "boot.oat file. See baksmali help classpath for more information.", splitter = ColonParameterSplitter.class) @ExtendedParameter(argumentNames = "classpath") public List<String> bootClassPath = null; @Parameter(names = {"-c", "--classpath", "--cp"}, - description = "A colon separated list of additional jar/oat files to include in the classpath " + - "when analyzing the dex file. These will be added to the classpath after any bootclasspath " + - "entries.", + description = "A colon separated list of additional files to include in the classpath when analyzing the " + + "dex file. These will be added to the classpath after any bootclasspath entries.", splitter = ColonParameterSplitter.class) @ExtendedParameter(argumentNames = "classpath") public List<String> classPath = Lists.newArrayList(); @@ -72,4 +76,10 @@ public class AnalysisArguments { "only be needed for 4.2.0 odexes. It was reverted in 4.2.1.") public boolean checkPackagePrivateAccess = false; } + + public ClassPath loadClassPathForDexFile(@Nonnull DexFile dexFile, boolean checkPackagePrivateAccess) + throws IOException { + return ClassPath.loadClassPath(classPathDirectories, bootClassPath, classPath, dexFile, apiLevel, + checkPackagePrivateAccess); + } } diff --git a/baksmali/src/main/java/org/jf/baksmali/DisassembleCommand.java b/baksmali/src/main/java/org/jf/baksmali/DisassembleCommand.java index b8c9c21d..0733af72 100644 --- a/baksmali/src/main/java/org/jf/baksmali/DisassembleCommand.java +++ b/baksmali/src/main/java/org/jf/baksmali/DisassembleCommand.java @@ -38,7 +38,6 @@ import com.beust.jcommander.ParametersDelegate; import com.beust.jcommander.validators.PositiveInteger; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import org.jf.dexlib2.analysis.ClassPath; import org.jf.dexlib2.dexbacked.DexBackedDexFile; import org.jf.dexlib2.iface.DexFile; import org.jf.dexlib2.util.SyntheticAccessorResolver; @@ -191,9 +190,8 @@ public class DisassembleCommand extends DexInputCommand { if (needsClassPath()) { try { - options.classPath = ClassPath.loadClassPath(analysisArguments.classPathDirectories, - analysisArguments.bootClassPath, analysisArguments.classPath, dexFile, - analysisArguments.apiLevel, shouldCheckPackagePrivateAccess()); + options.classPath = analysisArguments.loadClassPathForDexFile(dexFile, + shouldCheckPackagePrivateAccess()); } catch (Exception ex) { System.err.println("\n\nError occurred while loading class path files. Aborting."); ex.printStackTrace(System.err); diff --git a/baksmali/src/main/java/org/jf/baksmali/ListFieldOffsetsCommand.java b/baksmali/src/main/java/org/jf/baksmali/ListFieldOffsetsCommand.java index a241c51a..1990204f 100644 --- a/baksmali/src/main/java/org/jf/baksmali/ListFieldOffsetsCommand.java +++ b/baksmali/src/main/java/org/jf/baksmali/ListFieldOffsetsCommand.java @@ -35,7 +35,6 @@ import com.beust.jcommander.JCommander; import com.beust.jcommander.Parameter; import com.beust.jcommander.Parameters; import com.beust.jcommander.ParametersDelegate; -import org.jf.dexlib2.analysis.ClassPath; import org.jf.dexlib2.analysis.ClassProto; import org.jf.dexlib2.dexbacked.DexBackedDexFile; import org.jf.dexlib2.iface.ClassDef; @@ -106,9 +105,7 @@ public class ListFieldOffsetsCommand extends DexInputCommand { options.apiLevel = analysisArguments.apiLevel; try { - options.classPath = ClassPath.loadClassPath(analysisArguments.classPathDirectories, - analysisArguments.bootClassPath, analysisArguments.classPath, dexFile, analysisArguments.apiLevel, - false); + options.classPath = analysisArguments.loadClassPathForDexFile(dexFile, false); } catch (Exception ex) { System.err.println("Error occurred while loading class path files."); ex.printStackTrace(System.err); diff --git a/baksmali/src/main/java/org/jf/baksmali/ListVtablesCommand.java b/baksmali/src/main/java/org/jf/baksmali/ListVtablesCommand.java index f0d40fda..a0ccea39 100644 --- a/baksmali/src/main/java/org/jf/baksmali/ListVtablesCommand.java +++ b/baksmali/src/main/java/org/jf/baksmali/ListVtablesCommand.java @@ -36,7 +36,6 @@ import com.beust.jcommander.Parameter; import com.beust.jcommander.Parameters; import com.beust.jcommander.ParametersDelegate; import org.jf.baksmali.AnalysisArguments.CheckPackagePrivateArgument; -import org.jf.dexlib2.analysis.ClassPath; import org.jf.dexlib2.analysis.ClassProto; import org.jf.dexlib2.dexbacked.DexBackedDexFile; import org.jf.dexlib2.iface.ClassDef; @@ -134,8 +133,7 @@ public class ListVtablesCommand extends DexInputCommand { options.apiLevel = analysisArguments.apiLevel; try { - options.classPath = ClassPath.loadClassPath(analysisArguments.classPathDirectories, - analysisArguments.bootClassPath, analysisArguments.classPath, dexFile, analysisArguments.apiLevel, + options.classPath = analysisArguments.loadClassPathForDexFile(dexFile, checkPackagePrivateArgument.checkPackagePrivateAccess); } catch (Exception ex) { System.err.println("Error occurred while loading class path files."); |