From 9596513f6f970c19df1ab29e88cbc80e7556b44a Mon Sep 17 00:00:00 2001 From: Ben Gruver Date: Sun, 2 Feb 2014 19:29:26 -0800 Subject: [PATCH] Add support for non-standard invoke-object-init/range instructions --- .../main/java/org/jf/dexlib2/analysis/MethodAnalyzer.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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 fc2d2b9f..9f4b7331 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 @@ -1493,8 +1493,11 @@ public class MethodAnalyzer { Instruction deodexedInstruction; int startRegister = instruction.getStartRegister(); - int registerCount = instruction.getRegisterCount(); - if (registerCount == 1 && startRegister < 16) { + // hack: we should be using instruction.getRegisterCount, but some tweaked versions of dalvik appear + // to generate invoke-object-init/range instructions with an invalid register count. We know it should + // always be 1, so just use that. + int registerCount = 1; + if (startRegister < 16) { deodexedInstruction = new ImmutableInstruction35c(Opcode.INVOKE_DIRECT, registerCount, startRegister, 0, 0, 0, 0, instruction.getReference()); } else {