fix: InlineSmaliCompiler.compile using 0 registers instead of 1 by default

This commit is contained in:
oSumAtrIX 2022-06-21 17:46:43 +02:00
parent 99342fe033
commit 835a421cc0
No known key found for this signature in database
GPG Key ID: A9B3094ACDB604B4

View File

@ -14,8 +14,6 @@ import org.jf.smali.smaliParser
import org.jf.smali.smaliTreeWalker import org.jf.smali.smaliTreeWalker
import java.io.InputStreamReader import java.io.InputStreamReader
class InlineSmaliCompiler {
companion object {
private const val METHOD_TEMPLATE = """ private const val METHOD_TEMPLATE = """
.class LInlineCompiler; .class LInlineCompiler;
.super Ljava/lang/Object; .super Ljava/lang/Object;
@ -25,6 +23,8 @@ class InlineSmaliCompiler {
.end method .end method
""" """
class InlineSmaliCompiler {
companion object {
/** /**
* Compiles a string of Smali code to a list of instructions. * Compiles a string of Smali code to a list of instructions.
* p0, p1 etc. will only work correctly if the parameters and registers are passed. * p0, p1 etc. will only work correctly if the parameters and registers are passed.
@ -34,7 +34,7 @@ class InlineSmaliCompiler {
* be messed up and results in broken Dalvik bytecode. * be messed up and results in broken Dalvik bytecode.
* FIXME: Fix the above issue. When this is fixed, add the proper conversions in [InstructionConverter]. * FIXME: Fix the above issue. When this is fixed, add the proper conversions in [InstructionConverter].
*/ */
fun compileMethodInstructions( fun compile(
instructions: String, parameters: String, registers: Int, forStaticMethod: Boolean instructions: String, parameters: String, registers: Int, forStaticMethod: Boolean
): List<BuilderInstruction> { ): List<BuilderInstruction> {
val input = val input =
@ -64,9 +64,9 @@ class InlineSmaliCompiler {
* @param templateMethod The method to compile the instructions against. * @param templateMethod The method to compile the instructions against.
* @returns A list of instructions. * @returns A list of instructions.
*/ */
fun String.toInstructions(templateMethod: Method? = null) = InlineSmaliCompiler.compileMethodInstructions(this, fun String.toInstructions(templateMethod: Method? = null) = InlineSmaliCompiler.compile(this,
templateMethod?.parameters?.joinToString("") { it } ?: "", templateMethod?.parameters?.joinToString("") { it } ?: "",
templateMethod?.implementation?.registerCount ?: 0, templateMethod?.implementation?.registerCount ?: 1,
(templateMethod?.accessFlags ?: 0) and AccessFlags.STATIC.value != 0) (templateMethod?.accessFlags ?: 0) and AccessFlags.STATIC.value != 0)
/** /**