From 96ba0ab422d7f9747e93461524991cf5ceeb48c4 Mon Sep 17 00:00:00 2001 From: jeff Date: Thu, 19 Mar 2015 02:20:32 -0400 Subject: fix issue with naming method arguments and the local variable tables --- src/cuchaz/enigma/TranslatingTypeLoader.java | 2 +- .../enigma/bytecode/LocalVariableRenamer.java | 70 ++++++++++++++++++++-- .../enigma/bytecode/MethodParameterWriter.java | 14 +++++ .../enigma/bytecode/MethodParametersAttribute.java | 3 +- 4 files changed, 82 insertions(+), 7 deletions(-) diff --git a/src/cuchaz/enigma/TranslatingTypeLoader.java b/src/cuchaz/enigma/TranslatingTypeLoader.java index ecd7d642..dce4b859 100644 --- a/src/cuchaz/enigma/TranslatingTypeLoader.java +++ b/src/cuchaz/enigma/TranslatingTypeLoader.java @@ -233,7 +233,7 @@ public class TranslatingTypeLoader implements ITypeLoader { // do all kinds of deobfuscating transformations on the class new BridgeMarker(m_jarIndex).markBridges(c); new MethodParameterWriter(m_deobfuscatingTranslator).writeMethodArguments(c); - new LocalVariableRenamer().rename(c); + new LocalVariableRenamer(m_deobfuscatingTranslator).rename(c); new ClassTranslator(m_deobfuscatingTranslator).translate(c); return c; diff --git a/src/cuchaz/enigma/bytecode/LocalVariableRenamer.java b/src/cuchaz/enigma/bytecode/LocalVariableRenamer.java index c87c25be..1179560a 100644 --- a/src/cuchaz/enigma/bytecode/LocalVariableRenamer.java +++ b/src/cuchaz/enigma/bytecode/LocalVariableRenamer.java @@ -6,9 +6,20 @@ import javassist.bytecode.ByteArray; import javassist.bytecode.CodeAttribute; import javassist.bytecode.ConstPool; import javassist.bytecode.LocalVariableAttribute; +import javassist.bytecode.LocalVariableTypeAttribute; +import cuchaz.enigma.mapping.ArgumentEntry; +import cuchaz.enigma.mapping.BehaviorEntry; +import cuchaz.enigma.mapping.EntryFactory; +import cuchaz.enigma.mapping.Translator; public class LocalVariableRenamer { + + private Translator m_translator; + + public LocalVariableRenamer(Translator translator) { + m_translator = translator; + } public void rename(CtClass c) { for (CtBehavior behavior : c.getDeclaredBehaviors()) { @@ -18,18 +29,67 @@ public class LocalVariableRenamer { if (codeAttribute == null) { continue; } + + BehaviorEntry behaviorEntry = EntryFactory.getBehaviorEntry(behavior); + ConstPool constants = c.getClassFile().getConstPool(); + LocalVariableAttribute table = (LocalVariableAttribute)codeAttribute.getAttribute(LocalVariableAttribute.tag); - if (table == null) { - continue; + if (table != null) { + renameTable(behaviorEntry, constants, table); } - ConstPool constants = c.getClassFile().getConstPool(); - for (int i=0; i