Change DexInputEntry.loadDexFile to accept an Opcodes object instead of an api

This commit is contained in:
Ben Gruver 2016-09-26 22:20:47 -07:00
parent 8f27f45fb1
commit 7f20300b92
7 changed files with 19 additions and 15 deletions

View File

@ -100,10 +100,9 @@ public abstract class DexInputCommand extends Command {
* framework/arm/framework.oat/"system/framework/framework.jar:classes2.dex" * framework/arm/framework.oat/"system/framework/framework.jar:classes2.dex"
* *
* @param input The name of a dex, apk, odex or oat file/entry. * @param input The name of a dex, apk, odex or oat file/entry.
* @param apiLevel The api level to load the dex file with * @param opcodes The set of opcodes to load the dex file with.
*/ */
@Nonnull protected void loadDexFile(@Nonnull String input, Opcodes opcodes) {
protected void loadDexFile(@Nonnull String input, int apiLevel) {
File file = new File(input); File file = new File(input);
while (file != null && !file.exists()) { while (file != null && !file.exists()) {
@ -132,13 +131,13 @@ public abstract class DexInputCommand extends Command {
inputEntry = dexEntry; inputEntry = dexEntry;
try { try {
dexFile = DexFileFactory.loadDexEntry(file, dexEntry, exactMatch, Opcodes.forApi(apiLevel)); dexFile = DexFileFactory.loadDexEntry(file, dexEntry, exactMatch, opcodes);
} catch (IOException ex) { } catch (IOException ex) {
throw new RuntimeException(ex); throw new RuntimeException(ex);
} }
} else { } else {
try { try {
dexFile = DexFileFactory.loadDexFile(file, Opcodes.forApi(apiLevel)); dexFile = DexFileFactory.loadDexFile(file, opcodes);
} catch (IOException ex) { } catch (IOException ex) {
throw new RuntimeException(ex); throw new RuntimeException(ex);
} }

View File

@ -38,6 +38,7 @@ import com.beust.jcommander.ParametersDelegate;
import com.beust.jcommander.validators.PositiveInteger; import com.beust.jcommander.validators.PositiveInteger;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import org.jf.dexlib2.Opcodes;
import org.jf.dexlib2.util.SyntheticAccessorResolver; import org.jf.dexlib2.util.SyntheticAccessorResolver;
import org.jf.util.StringWrapper; import org.jf.util.StringWrapper;
import org.jf.util.jcommander.ExtendedParameter; import org.jf.util.jcommander.ExtendedParameter;
@ -149,7 +150,7 @@ public class DisassembleCommand extends DexInputCommand {
} }
String input = inputList.get(0); String input = inputList.get(0);
loadDexFile(input, 15); loadDexFile(input, Opcodes.getDefault());
if (showDeodexWarning() && dexFile.hasOdexOpcodes()) { if (showDeodexWarning() && dexFile.hasOdexOpcodes()) {
StringWrapper.printWrappedString(System.err, StringWrapper.printWrappedString(System.err,

View File

@ -34,6 +34,7 @@ package org.jf.baksmali;
import com.beust.jcommander.JCommander; import com.beust.jcommander.JCommander;
import com.beust.jcommander.Parameter; import com.beust.jcommander.Parameter;
import com.beust.jcommander.Parameters; import com.beust.jcommander.Parameters;
import org.jf.dexlib2.Opcodes;
import org.jf.dexlib2.dexbacked.DexBackedDexFile; import org.jf.dexlib2.dexbacked.DexBackedDexFile;
import org.jf.dexlib2.dexbacked.raw.RawDexFile; import org.jf.dexlib2.dexbacked.raw.RawDexFile;
import org.jf.dexlib2.dexbacked.raw.util.DexAnnotator; import org.jf.dexlib2.dexbacked.raw.util.DexAnnotator;
@ -77,7 +78,7 @@ public class DumpCommand extends DexInputCommand {
} }
String input = inputList.get(0); String input = inputList.get(0);
loadDexFile(input, 15); loadDexFile(input, Opcodes.getDefault());
try { try {
dump(dexFile, System.out, apiLevel); dump(dexFile, System.out, apiLevel);

View File

@ -34,8 +34,8 @@ package org.jf.baksmali;
import com.beust.jcommander.JCommander; import com.beust.jcommander.JCommander;
import com.beust.jcommander.Parameter; import com.beust.jcommander.Parameter;
import com.beust.jcommander.Parameters; import com.beust.jcommander.Parameters;
import org.jf.dexlib2.iface.reference.Reference; import org.jf.dexlib2.Opcodes;
import org.jf.dexlib2.util.ReferenceUtil; import org.jf.dexlib2.iface.ClassDef;
import org.jf.util.jcommander.ExtendedParameters; import org.jf.util.jcommander.ExtendedParameters;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
@ -68,10 +68,10 @@ public class ListClassesCommand extends DexInputCommand {
} }
String input = inputList.get(0); String input = inputList.get(0);
loadDexFile(input, 15); loadDexFile(input, Opcodes.getDefault());
for (Reference reference: dexFile.getClasses()) { for (ClassDef classDef: dexFile.getClasses()) {
System.out.println(ReferenceUtil.getReferenceString(reference)); System.out.println(classDef.getType());
} }
} }
} }

View File

@ -35,6 +35,7 @@ import com.beust.jcommander.JCommander;
import com.beust.jcommander.Parameter; import com.beust.jcommander.Parameter;
import com.beust.jcommander.Parameters; import com.beust.jcommander.Parameters;
import com.beust.jcommander.ParametersDelegate; import com.beust.jcommander.ParametersDelegate;
import org.jf.dexlib2.Opcodes;
import org.jf.dexlib2.analysis.ClassProto; import org.jf.dexlib2.analysis.ClassProto;
import org.jf.dexlib2.iface.ClassDef; import org.jf.dexlib2.iface.ClassDef;
import org.jf.dexlib2.iface.reference.FieldReference; import org.jf.dexlib2.iface.reference.FieldReference;
@ -75,7 +76,7 @@ public class ListFieldOffsetsCommand extends DexInputCommand {
} }
String input = inputList.get(0); String input = inputList.get(0);
loadDexFile(input, 15); loadDexFile(input, Opcodes.getDefault());
BaksmaliOptions options = getOptions(); BaksmaliOptions options = getOptions();
try { try {

View File

@ -33,6 +33,7 @@ package org.jf.baksmali;
import com.beust.jcommander.JCommander; import com.beust.jcommander.JCommander;
import com.beust.jcommander.Parameter; import com.beust.jcommander.Parameter;
import org.jf.dexlib2.Opcodes;
import org.jf.dexlib2.iface.reference.Reference; import org.jf.dexlib2.iface.reference.Reference;
import org.jf.dexlib2.util.ReferenceUtil; import org.jf.dexlib2.util.ReferenceUtil;
@ -65,7 +66,7 @@ public abstract class ListReferencesCommand extends DexInputCommand {
} }
String input = inputList.get(0); String input = inputList.get(0);
loadDexFile(input, 15); loadDexFile(input, Opcodes.getDefault());
for (Reference reference: dexFile.getReferences(referenceType)) { for (Reference reference: dexFile.getReferences(referenceType)) {
System.out.println(ReferenceUtil.getReferenceString(reference)); System.out.println(ReferenceUtil.getReferenceString(reference));

View File

@ -37,6 +37,7 @@ import com.beust.jcommander.Parameters;
import com.beust.jcommander.ParametersDelegate; import com.beust.jcommander.ParametersDelegate;
import org.jf.baksmali.AnalysisArguments.CheckPackagePrivateArgument; import org.jf.baksmali.AnalysisArguments.CheckPackagePrivateArgument;
import org.jf.dexlib2.AccessFlags; import org.jf.dexlib2.AccessFlags;
import org.jf.dexlib2.Opcodes;
import org.jf.dexlib2.analysis.ClassProto; import org.jf.dexlib2.analysis.ClassProto;
import org.jf.dexlib2.iface.ClassDef; import org.jf.dexlib2.iface.ClassDef;
import org.jf.dexlib2.iface.Method; import org.jf.dexlib2.iface.Method;
@ -91,7 +92,7 @@ public class ListVtablesCommand extends DexInputCommand {
} }
String input = inputList.get(0); String input = inputList.get(0);
loadDexFile(input, 15); loadDexFile(input, Opcodes.getDefault());
BaksmaliOptions options = getOptions(); BaksmaliOptions options = getOptions();
if (options == null) { if (options == null) {