From b7e78115277e30c71e6e991da3f31c5a1403c634 Mon Sep 17 00:00:00 2001 From: "JesusFreke@JesusFreke.com" Date: Sun, 24 Jan 2010 19:35:35 +0000 Subject: [PATCH] Fix how the address for the array data is calculated git-svn-id: https://smali.googlecode.com/svn/trunk@581 55b6fa8a-2a1e-11de-a435-ffa8d773f76a --- .../java/org/jf/dexlib/Code/Analysis/MethodAnalyzer.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/MethodAnalyzer.java b/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/MethodAnalyzer.java index b7a1efa9..f16f32e7 100644 --- a/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/MethodAnalyzer.java +++ b/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/MethodAnalyzer.java @@ -1122,11 +1122,12 @@ public class MethodAnalyzer { } - int arrayDataOffset = ((OffsetInstruction)analyzedInstruction.instruction).getTargetAddressOffset(); - AnalyzedInstruction arrayDataInstruction = this.instructions.get(arrayDataOffset); + int arrayDataAddressOffset = ((OffsetInstruction)analyzedInstruction.instruction).getTargetAddressOffset(); + int arrayDataCodeAddress = getInstructionAddress(analyzedInstruction) + arrayDataAddressOffset; + AnalyzedInstruction arrayDataInstruction = this.instructions.get(arrayDataCodeAddress); if (arrayDataInstruction == null || arrayDataInstruction.instruction.getFormat() != Format.ArrayData) { throw new ValidationException(String.format("Could not find an array data structure at code address 0x%x", - arrayDataOffset)); + arrayDataCodeAddress)); } ArrayDataPseudoInstruction arrayDataPseudoInstruction = @@ -1135,7 +1136,7 @@ public class MethodAnalyzer { if (elementWidth != arrayDataPseudoInstruction.getElementWidth()) { throw new ValidationException(String.format("The array data at code address 0x%x does not have the " + "correct element width for array type %s. Expecting element width %d, got element width %d.", - arrayDataOffset, arrayClassDef.getClassType(), elementWidth, + arrayDataCodeAddress, arrayClassDef.getClassType(), elementWidth, arrayDataPseudoInstruction.getElementWidth())); }