Commit f5f170940d59792cd0a9747d7e03c9fd323774dc
1 parent
b8f2dade
LiteLoader 1.6.4_02 - experimental - banish CallableJVMFlags override an use ASM instead
Showing
5 changed files
with
72 additions
and
57 deletions
.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