Commit f5f170940d59792cd0a9747d7e03c9fd323774dc

Authored by Mumfrey
1 parent b8f2dade

LiteLoader 1.6.4_02 - experimental - banish CallableJVMFlags override an use ASM instead

.classpath
@@ -7,10 +7,15 @@ @@ -7,10 +7,15 @@
7 <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 7 <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
8 <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/org/lwjgl/lwjgl/lwjgl/2.9.0/lwjgl-2.9.0.jar"/> 8 <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/org/lwjgl/lwjgl/lwjgl/2.9.0/lwjgl-2.9.0.jar"/>
9 <classpathentry kind="lib" path="/Client/jars/libraries/com/google/code/gson/gson/2.2.2/gson-2.2.2.jar"/> 9 <classpathentry kind="lib" path="/Client/jars/libraries/com/google/code/gson/gson/2.2.2/gson-2.2.2.jar"/>
10 - <classpathentry kind="lib" path="/Client/jars/libraries/com/google/guava/guava/14.0/guava-14.0.jar"/> 10 + <classpathentry kind="lib" path="/Client/jars/libraries/com/google/guava/guava/14.0/guava-14.0.jar">
  11 + <attributes>
  12 + <attribute name="javadoc_location" value="jar:platform:/resource/LiteLoader/javadoc/guava-14.0.1-javadoc.jar!/"/>
  13 + </attributes>
  14 + </classpathentry>
11 <classpathentry kind="lib" path="/Client/jars/libraries/commons-io/commons-io/2.4/commons-io-2.4.jar"/> 15 <classpathentry kind="lib" path="/Client/jars/libraries/commons-io/commons-io/2.4/commons-io-2.4.jar"/>
12 <classpathentry exported="true" kind="lib" path="lib/launchwrapper-1.8.jar"/> 16 <classpathentry exported="true" kind="lib" path="lib/launchwrapper-1.8.jar"/>
13 <classpathentry kind="lib" path="lib/jopt-simple-4.5.jar"/> 17 <classpathentry kind="lib" path="lib/jopt-simple-4.5.jar"/>
14 <classpathentry kind="lib" path="lib/launcher.jar"/> 18 <classpathentry kind="lib" path="lib/launcher.jar"/>
  19 + <classpathentry exported="true" kind="lib" path="lib/asm-debug-all-4.1.jar"/>
15 <classpathentry kind="output" path="bin"/> 20 <classpathentry kind="output" path="bin"/>
16 </classpath> 21 </classpath>
java/com/mumfrey/liteloader/launch/LiteLoaderTransformer.java
1 package com.mumfrey.liteloader.launch; 1 package com.mumfrey.liteloader.launch;
2 2
  3 +import java.util.ListIterator;
  4 +
3 import net.minecraft.launchwrapper.IClassTransformer; 5 import net.minecraft.launchwrapper.IClassTransformer;
4 6
  7 +import org.objectweb.asm.ClassReader;
  8 +import org.objectweb.asm.ClassWriter;
  9 +import org.objectweb.asm.Opcodes;
  10 +import org.objectweb.asm.tree.AbstractInsnNode;
  11 +import org.objectweb.asm.tree.ClassNode;
  12 +import org.objectweb.asm.tree.InsnList;
  13 +import org.objectweb.asm.tree.MethodInsnNode;
  14 +import org.objectweb.asm.tree.MethodNode;
  15 +import org.objectweb.asm.tree.VarInsnNode;
  16 +
5 public class LiteLoaderTransformer implements IClassTransformer 17 public class LiteLoaderTransformer implements IClassTransformer
6 { 18 {
7 private static final String classMappingRenderLightningBolt = "net.minecraft.src.RenderLightningBolt"; 19 private static final String classMappingRenderLightningBolt = "net.minecraft.src.RenderLightningBolt";
  20 + private static final String classMappingCallableJVMFlags = "net.minecraft.src.CallableJVMFlags";
8 21
9 // TODO Obfuscation 1.6.4 22 // TODO Obfuscation 1.6.4
10 private static final String classMappingRenderLightningBoltObf = "bha"; 23 private static final String classMappingRenderLightningBoltObf = "bha";
  24 + private static final String classMappingCallableJVMFlagsObf = "h";
11 25
12 private static boolean postInit = false; 26 private static boolean postInit = false;
13 27
@@ -21,6 +35,58 @@ public class LiteLoaderTransformer implements IClassTransformer @@ -21,6 +35,58 @@ public class LiteLoaderTransformer implements IClassTransformer
21 LiteLoaderTweaker.postInit(); 35 LiteLoaderTweaker.postInit();
22 } 36 }
23 37
  38 + if (classMappingCallableJVMFlags.equals(name) || classMappingCallableJVMFlagsObf.equals(name))
  39 + {
  40 + try
  41 + {
  42 + return this.transformCallableJVMFlags(basicClass);
  43 + }
  44 + catch (Exception ex) {}
  45 + }
  46 +
24 return basicClass; 47 return basicClass;
25 } 48 }
  49 +
  50 + /**
  51 + * Inject the additional callback for populating the crash report into the CallableJVMFlags class
  52 + *
  53 + * @param basicClass basic class
  54 + * @return transformed class
  55 + */
  56 + private byte[] transformCallableJVMFlags(byte[] basicClass)
  57 + {
  58 + ClassReader classReader = new ClassReader(basicClass);
  59 + ClassNode classNode = new ClassNode();
  60 + classReader.accept(classNode, ClassReader.EXPAND_FRAMES);
  61 +
  62 + for (MethodNode method : classNode.methods)
  63 + {
  64 + if ("<init>".equals(method.name))
  65 + {
  66 + this.transformCallableJVMFlagsConstructor(method);
  67 + }
  68 + }
  69 +
  70 + ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
  71 + classNode.accept(writer);
  72 + return writer.toByteArray();
  73 + }
  74 +
  75 + /**
  76 + * @param ctor
  77 + */
  78 + public void transformCallableJVMFlagsConstructor(MethodNode ctor)
  79 + {
  80 + InsnList code = new InsnList();
  81 + code.add(new VarInsnNode(Opcodes.ALOAD, 1));
  82 + code.add(new MethodInsnNode(Opcodes.INVOKESTATIC, "com/mumfrey/liteloader/core/LiteLoader", "populateCrashReport", "(Ljava/lang/Object;)V"));
  83 +
  84 + ListIterator<AbstractInsnNode> insns = ctor.instructions.iterator();
  85 + while (insns.hasNext())
  86 + {
  87 + AbstractInsnNode insnNode = insns.next();
  88 + if (insnNode.getOpcode() == Opcodes.RETURN)
  89 + ctor.instructions.insertBefore(insnNode, code);
  90 + }
  91 + }
26 } 92 }
java/net/minecraft/src/CallableJVMFlags.java deleted 100644 โ†’ 0
1 -package net.minecraft.src;  
2 -  
3 -import java.lang.management.ManagementFactory;  
4 -import java.lang.management.RuntimeMXBean;  
5 -import java.util.Iterator;  
6 -import java.util.List;  
7 -import java.util.concurrent.Callable;  
8 -  
9 -import com.mumfrey.liteloader.core.LiteLoader;  
10 -  
11 -class CallableJVMFlags implements Callable<String>  
12 -{  
13 - /** Reference to the CrashReport object. */  
14 - final CrashReport theCrashReport;  
15 -  
16 - CallableJVMFlags(CrashReport par1CrashReport)  
17 - {  
18 - this.theCrashReport = par1CrashReport;  
19 - LiteLoader.populateCrashReport(par1CrashReport);  
20 - }  
21 -  
22 - /**  
23 - * Returns the number of JVM Flags along with the passed JVM Flags.  
24 - */  
25 - public String getJVMFlagsAsString()  
26 - {  
27 - RuntimeMXBean var1 = ManagementFactory.getRuntimeMXBean();  
28 - List<String> var2 = var1.getInputArguments();  
29 - int var3 = 0;  
30 - StringBuilder var4 = new StringBuilder();  
31 - Iterator<String> var5 = var2.iterator();  
32 -  
33 - while (var5.hasNext())  
34 - {  
35 - String var6 = var5.next();  
36 -  
37 - if (var6.startsWith("-X"))  
38 - {  
39 - if (var3++ > 0)  
40 - {  
41 - var4.append(" ");  
42 - }  
43 -  
44 - var4.append(var6);  
45 - }  
46 - }  
47 -  
48 - return String.format("%d total; %s", new Object[] {Integer.valueOf(var3), var4.toString()});  
49 - }  
50 -  
51 - @Override  
52 - public String call()  
53 - {  
54 - return this.getJVMFlagsAsString();  
55 - }  
56 -}  
javadoc/guava-14.0.1-javadoc.jar 0 โ†’ 100644
No preview for this file type
lib/asm-debug-all-4.1.jar 0 โ†’ 100644
No preview for this file type