summaryrefslogtreecommitdiff
path: root/src/cuchaz
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuchaz')
-rw-r--r--src/cuchaz/enigma/TranslatingTypeLoader.java2
-rw-r--r--src/cuchaz/enigma/bytecode/LocalVariableRenamer.java32
2 files changed, 34 insertions, 0 deletions
diff --git a/src/cuchaz/enigma/TranslatingTypeLoader.java b/src/cuchaz/enigma/TranslatingTypeLoader.java
index 94ad6eb..7b57cfa 100644
--- a/src/cuchaz/enigma/TranslatingTypeLoader.java
+++ b/src/cuchaz/enigma/TranslatingTypeLoader.java
@@ -36,6 +36,7 @@ import cuchaz.enigma.analysis.JarIndex;
36import cuchaz.enigma.bytecode.ClassRenamer; 36import cuchaz.enigma.bytecode.ClassRenamer;
37import cuchaz.enigma.bytecode.ClassTranslator; 37import cuchaz.enigma.bytecode.ClassTranslator;
38import cuchaz.enigma.bytecode.InnerClassWriter; 38import cuchaz.enigma.bytecode.InnerClassWriter;
39import cuchaz.enigma.bytecode.LocalVariableRenamer;
39import cuchaz.enigma.bytecode.MethodParameterWriter; 40import cuchaz.enigma.bytecode.MethodParameterWriter;
40import cuchaz.enigma.mapping.ClassEntry; 41import cuchaz.enigma.mapping.ClassEntry;
41import cuchaz.enigma.mapping.Translator; 42import cuchaz.enigma.mapping.Translator;
@@ -232,6 +233,7 @@ public class TranslatingTypeLoader implements ITypeLoader {
232 // do all kinds of deobfuscating transformations on the class 233 // do all kinds of deobfuscating transformations on the class
233 new BridgeMarker(m_jarIndex).markBridges(c); 234 new BridgeMarker(m_jarIndex).markBridges(c);
234 new MethodParameterWriter(m_deobfuscatingTranslator).writeMethodArguments(c); 235 new MethodParameterWriter(m_deobfuscatingTranslator).writeMethodArguments(c);
236 new LocalVariableRenamer().rename(c);
235 new ClassTranslator(m_deobfuscatingTranslator).translate(c); 237 new ClassTranslator(m_deobfuscatingTranslator).translate(c);
236 238
237 return c; 239 return c;
diff --git a/src/cuchaz/enigma/bytecode/LocalVariableRenamer.java b/src/cuchaz/enigma/bytecode/LocalVariableRenamer.java
new file mode 100644
index 0000000..53f207c
--- /dev/null
+++ b/src/cuchaz/enigma/bytecode/LocalVariableRenamer.java
@@ -0,0 +1,32 @@
1package cuchaz.enigma.bytecode;
2
3import javassist.CtBehavior;
4import javassist.CtClass;
5import javassist.bytecode.ByteArray;
6import javassist.bytecode.ConstPool;
7import javassist.bytecode.LocalVariableAttribute;
8
9
10public class LocalVariableRenamer {
11
12 public void rename(CtClass c) {
13 for (CtBehavior behavior : c.getDeclaredBehaviors()) {
14
15 // if there's a local variable table, just rename everything to v1, v2, v3, ... for now
16 LocalVariableAttribute table = (LocalVariableAttribute)behavior.getMethodInfo().getCodeAttribute().getAttribute(LocalVariableAttribute.tag);
17 if (table == null) {
18 continue;
19 }
20
21 ConstPool constants = c.getClassFile().getConstPool();
22 for (int i=0; i<table.tableLength(); i++) {
23 renameVariable(table, i, constants.addUtf8Info("v" + i));
24 }
25 }
26 }
27
28 private void renameVariable(LocalVariableAttribute table, int i, int stringId) {
29 // based off of LocalVariableAttribute.nameIndex()
30 ByteArray.write16bit(stringId, table.get(), i*10 + 6);
31 }
32}