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 7 <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
8 8 <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/org/lwjgl/lwjgl/lwjgl/2.9.0/lwjgl-2.9.0.jar"/>
9 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 15 <classpathentry kind="lib" path="/Client/jars/libraries/commons-io/commons-io/2.4/commons-io-2.4.jar"/>
12 16 <classpathentry exported="true" kind="lib" path="lib/launchwrapper-1.8.jar"/>
13 17 <classpathentry kind="lib" path="lib/jopt-simple-4.5.jar"/>
14 18 <classpathentry kind="lib" path="lib/launcher.jar"/>
  19 + <classpathentry exported="true" kind="lib" path="lib/asm-debug-all-4.1.jar"/>
15 20 <classpathentry kind="output" path="bin"/>
16 21 </classpath>
... ...
java/com/mumfrey/liteloader/launch/LiteLoaderTransformer.java
1 1 package com.mumfrey.liteloader.launch;
2 2  
  3 +import java.util.ListIterator;
  4 +
3 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 17 public class LiteLoaderTransformer implements IClassTransformer
6 18 {
7 19 private static final String classMappingRenderLightningBolt = "net.minecraft.src.RenderLightningBolt";
  20 + private static final String classMappingCallableJVMFlags = "net.minecraft.src.CallableJVMFlags";
8 21  
9 22 // TODO Obfuscation 1.6.4
10 23 private static final String classMappingRenderLightningBoltObf = "bha";
  24 + private static final String classMappingCallableJVMFlagsObf = "h";
11 25  
12 26 private static boolean postInit = false;
13 27  
... ... @@ -21,6 +35,58 @@ public class LiteLoaderTransformer implements IClassTransformer
21 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 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