mirror of
https://github.com/revanced/smali.git
synced 2025-05-29 20:20:12 +02:00
Add the inline method table for froyo's dalvik
git-svn-id: https://smali.googlecode.com/svn/trunk@726 55b6fa8a-2a1e-11de-a435-ffa8d773f76a
This commit is contained in:
parent
14348d570e
commit
2880e1c625
@ -39,7 +39,9 @@ public class DeodexUtil {
|
|||||||
public static final int Direct = 1;
|
public static final int Direct = 1;
|
||||||
public static final int Static = 2;
|
public static final int Static = 2;
|
||||||
|
|
||||||
private InlineMethod[] inlineMethods = new InlineMethod[] {
|
private final InlineMethod[] inlineMethods;
|
||||||
|
|
||||||
|
private final InlineMethod[] inlineMethods_35 = new InlineMethod[] {
|
||||||
new InlineMethod(Static, "Lorg/apache/harmony/dalvik/NativeTestTarget;", "emptyInlineMethod", "", "V"),
|
new InlineMethod(Static, "Lorg/apache/harmony/dalvik/NativeTestTarget;", "emptyInlineMethod", "", "V"),
|
||||||
new InlineMethod(Virtual, "Ljava/lang/String;", "charAt", "I", "C"),
|
new InlineMethod(Virtual, "Ljava/lang/String;", "charAt", "I", "C"),
|
||||||
new InlineMethod(Virtual, "Ljava/lang/String;", "compareTo", "Ljava/lang/String;", "I"),
|
new InlineMethod(Virtual, "Ljava/lang/String;", "compareTo", "Ljava/lang/String;", "I"),
|
||||||
@ -56,17 +58,48 @@ public class DeodexUtil {
|
|||||||
new InlineMethod(Static, "Ljava/lang/Math;", "sin", "D", "D")
|
new InlineMethod(Static, "Ljava/lang/Math;", "sin", "D", "D")
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private final InlineMethod[] inlineMethods_36 = new InlineMethod[] {
|
||||||
|
new InlineMethod(Static, "Lorg/apache/harmony/dalvik/NativeTestTarget;", "emptyInlineMethod", "", "V"),
|
||||||
|
new InlineMethod(Virtual, "Ljava/lang/String;", "charAt", "I", "C"),
|
||||||
|
new InlineMethod(Virtual, "Ljava/lang/String;", "compareTo", "Ljava/lang/String;", "I"),
|
||||||
|
new InlineMethod(Virtual, "Ljava/lang/String;", "equals", "Ljava/lang/Object;", "Z"),
|
||||||
|
new InlineMethod(Virtual, "Ljava/lang/String;", "indexOf", "I", "I"),
|
||||||
|
new InlineMethod(Virtual, "Ljava/lang/String;", "indexOf", "II", "I"),
|
||||||
|
new InlineMethod(Virtual, "Ljava/lang/String;", "length", "", "I"),
|
||||||
|
new InlineMethod(Static, "Ljava/lang/Math;", "abs", "I", "I"),
|
||||||
|
new InlineMethod(Static, "Ljava/lang/Math;", "abs", "J", "J"),
|
||||||
|
new InlineMethod(Static, "Ljava/lang/Math;", "abs", "F", "F"),
|
||||||
|
new InlineMethod(Static, "Ljava/lang/Math;", "abs", "D", "D"),
|
||||||
|
new InlineMethod(Static, "Ljava/lang/Math;", "min", "II", "I"),
|
||||||
|
new InlineMethod(Static, "Ljava/lang/Math;", "max", "II", "I"),
|
||||||
|
new InlineMethod(Static, "Ljava/lang/Math;", "sqrt", "D", "D"),
|
||||||
|
new InlineMethod(Static, "Ljava/lang/Math;", "cos", "D", "D"),
|
||||||
|
new InlineMethod(Static, "Ljava/lang/Math;", "sin", "D", "D")
|
||||||
|
};
|
||||||
|
|
||||||
public final DexFile dexFile;
|
public final DexFile dexFile;
|
||||||
|
|
||||||
public DeodexUtil(DexFile dexFile) {
|
public DeodexUtil(DexFile dexFile) {
|
||||||
this.dexFile = dexFile;
|
this.dexFile = dexFile;
|
||||||
|
OdexHeader odexHeader = dexFile.getOdexHeader();
|
||||||
|
if (odexHeader == null) {
|
||||||
|
//if there isn't an odex header, why are we creating an DeodexUtil object?
|
||||||
|
assert false;
|
||||||
|
throw new RuntimeException("Cannot create a DeodexUtil object for a dex file without an odex header");
|
||||||
|
} else if (odexHeader.version == 35) {
|
||||||
|
inlineMethods = inlineMethods_35;
|
||||||
|
} else if (odexHeader.version == 36) {
|
||||||
|
inlineMethods = inlineMethods_36;
|
||||||
|
} else {
|
||||||
|
assert false;
|
||||||
|
throw new RuntimeException(String.format("odex version %d isn't supported yet", odexHeader.version));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public InlineMethod lookupInlineMethod(int inlineMethodIndex) {
|
public InlineMethod lookupInlineMethod(int inlineMethodIndex) {
|
||||||
if (inlineMethodIndex >= inlineMethods.length) {
|
if (inlineMethodIndex >= inlineMethods.length) {
|
||||||
throw new RuntimeException("Invalid inline method index " + inlineMethodIndex + ".");
|
throw new RuntimeException("Invalid inline method index " + inlineMethodIndex + ".");
|
||||||
}
|
}
|
||||||
|
|
||||||
return inlineMethods[inlineMethodIndex];
|
return inlineMethods[inlineMethodIndex];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user