Advertisement
Superloup10

Test

Jul 27th, 2014
309
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package asm.fr.mcnanotech.nhg.asm;
  2. import java.util.*;
  3. import org.objectweb.asm.*;
  4. public class NHGClassTransformerDump implements Opcodes {
  5.  
  6. public static byte[] dump () throws Exception {
  7.  
  8. ClassWriter cw = new ClassWriter(0);
  9. FieldVisitor fv;
  10. MethodVisitor mv;
  11. AnnotationVisitor av0;
  12.  
  13. cw.visit(V1_6, ACC_PUBLIC + ACC_SUPER, "fr/mcnanotech/nhg/asm/NHGClassTransformer", null, "java/lang/Object", new String[] { "net/minecraft/launchwrapper/IClassTransformer" });
  14.  
  15. cw.visitSource("NHGClassTransformer.java", null);
  16.  
  17. {
  18. mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
  19. mv.visitCode();
  20. Label l0 = new Label();
  21. mv.visitLabel(l0);
  22. mv.visitLineNumber(13, l0);
  23. mv.visitVarInsn(ALOAD, 0);
  24. mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
  25. mv.visitInsn(RETURN);
  26. Label l1 = new Label();
  27. mv.visitLabel(l1);
  28. mv.visitLocalVariable("this", "Lfr/mcnanotech/nhg/asm/NHGClassTransformer;", null, l0, l1, 0);
  29. mv.visitMaxs(1, 1);
  30. mv.visitEnd();
  31. }
  32. {
  33. mv = cw.visitMethod(ACC_PUBLIC, "transform", "(Ljava/lang/String;Ljava/lang/String;[B)[B", null, null);
  34. mv.visitCode();
  35. Label l0 = new Label();
  36. mv.visitLabel(l0);
  37. mv.visitLineNumber(18, l0);
  38. mv.visitVarInsn(ALOAD, 1);
  39. mv.visitLdcInsn("xz");
  40. mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "equals", "(Ljava/lang/Object;)Z", false);
  41. Label l1 = new Label();
  42. mv.visitJumpInsn(IFNE, l1);
  43. mv.visitVarInsn(ALOAD, 1);
  44. mv.visitLdcInsn("net.minecraft.entity.monster.EntityCreeper");
  45. mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "equals", "(Ljava/lang/Object;)Z", false);
  46. Label l2 = new Label();
  47. mv.visitJumpInsn(IFEQ, l2);
  48. mv.visitLabel(l1);
  49. mv.visitLineNumber(20, l1);
  50. mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
  51. mv.visitVarInsn(ALOAD, 0);
  52. mv.visitVarInsn(ALOAD, 1);
  53. mv.visitVarInsn(ALOAD, 3);
  54. mv.visitInsn(ICONST_1);
  55. mv.visitMethodInsn(INVOKESPECIAL, "fr/mcnanotech/nhg/asm/NHGClassTransformer", "patchClassASM", "(Ljava/lang/String;[BZ)[B", false);
  56. mv.visitInsn(ARETURN);
  57. mv.visitLabel(l2);
  58. mv.visitLineNumber(23, l2);
  59. mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
  60. mv.visitVarInsn(ALOAD, 3);
  61. mv.visitInsn(ARETURN);
  62. Label l3 = new Label();
  63. mv.visitLabel(l3);
  64. mv.visitLocalVariable("this", "Lfr/mcnanotech/nhg/asm/NHGClassTransformer;", null, l0, l3, 0);
  65. mv.visitLocalVariable("nameClassVanilla", "Ljava/lang/String;", null, l0, l3, 1);
  66. mv.visitLocalVariable("nameClassCustom", "Ljava/lang/String;", null, l0, l3, 2);
  67. mv.visitLocalVariable("byteCode", "[B", null, l0, l3, 3);
  68. mv.visitMaxs(4, 4);
  69. mv.visitEnd();
  70. }
  71. {
  72. mv = cw.visitMethod(ACC_PRIVATE, "patchClassASM", "(Ljava/lang/String;[BZ)[B", null, null);
  73. mv.visitCode();
  74. Label l0 = new Label();
  75. mv.visitLabel(l0);
  76. mv.visitLineNumber(28, l0);
  77. mv.visitLdcInsn("");
  78. mv.visitVarInsn(ASTORE, 4);
  79. Label l1 = new Label();
  80. mv.visitLabel(l1);
  81. mv.visitLineNumber(30, l1);
  82. mv.visitVarInsn(ILOAD, 3);
  83. Label l2 = new Label();
  84. mv.visitJumpInsn(IFEQ, l2);
  85. Label l3 = new Label();
  86. mv.visitLabel(l3);
  87. mv.visitLineNumber(32, l3);
  88. mv.visitLdcInsn("func_70069_a");
  89. mv.visitVarInsn(ASTORE, 4);
  90. Label l4 = new Label();
  91. mv.visitLabel(l4);
  92. mv.visitLineNumber(33, l4);
  93. Label l5 = new Label();
  94. mv.visitJumpInsn(GOTO, l5);
  95. mv.visitLabel(l2);
  96. mv.visitLineNumber(36, l2);
  97. mv.visitFrame(Opcodes.F_APPEND,1, new Object[] {"java/lang/String"}, 0, null);
  98. mv.visitLdcInsn("fall");
  99. mv.visitVarInsn(ASTORE, 4);
  100. mv.visitLabel(l5);
  101. mv.visitLineNumber(39, l5);
  102. mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
  103. mv.visitTypeInsn(NEW, "org/objectweb/asm/tree/ClassNode");
  104. mv.visitInsn(DUP);
  105. mv.visitMethodInsn(INVOKESPECIAL, "org/objectweb/asm/tree/ClassNode", "<init>", "()V", false);
  106. mv.visitVarInsn(ASTORE, 5);
  107. Label l6 = new Label();
  108. mv.visitLabel(l6);
  109. mv.visitLineNumber(40, l6);
  110. mv.visitTypeInsn(NEW, "org/objectweb/asm/ClassReader");
  111. mv.visitInsn(DUP);
  112. mv.visitVarInsn(ALOAD, 2);
  113. mv.visitMethodInsn(INVOKESPECIAL, "org/objectweb/asm/ClassReader", "<init>", "([B)V", false);
  114. mv.visitVarInsn(ASTORE, 6);
  115. Label l7 = new Label();
  116. mv.visitLabel(l7);
  117. mv.visitLineNumber(41, l7);
  118. mv.visitVarInsn(ALOAD, 6);
  119. mv.visitVarInsn(ALOAD, 5);
  120. mv.visitInsn(ICONST_0);
  121. mv.visitMethodInsn(INVOKEVIRTUAL, "org/objectweb/asm/ClassReader", "accept", "(Lorg/objectweb/asm/ClassVisitor;I)V", false);
  122. Label l8 = new Label();
  123. mv.visitLabel(l8);
  124. mv.visitLineNumber(43, l8);
  125. mv.visitVarInsn(ALOAD, 5);
  126. mv.visitFieldInsn(GETFIELD, "org/objectweb/asm/tree/ClassNode", "methods", "Ljava/util/List;");
  127. mv.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "iterator", "()Ljava/util/Iterator;", true);
  128. mv.visitVarInsn(ASTORE, 7);
  129. Label l9 = new Label();
  130. mv.visitLabel(l9);
  131. mv.visitLineNumber(44, l9);
  132. Label l10 = new Label();
  133. mv.visitJumpInsn(GOTO, l10);
  134. Label l11 = new Label();
  135. mv.visitLabel(l11);
  136. mv.visitLineNumber(46, l11);
  137. mv.visitFrame(Opcodes.F_APPEND,3, new Object[] {"org/objectweb/asm/tree/ClassNode", "org/objectweb/asm/ClassReader", "java/util/Iterator"}, 0, null);
  138. mv.visitVarInsn(ALOAD, 7);
  139. mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;", true);
  140. mv.visitTypeInsn(CHECKCAST, "org/objectweb/asm/tree/MethodNode");
  141. mv.visitVarInsn(ASTORE, 8);
  142. Label l12 = new Label();
  143. mv.visitLabel(l12);
  144. mv.visitLineNumber(47, l12);
  145. mv.visitInsn(ICONST_M1);
  146. mv.visitVarInsn(ISTORE, 9);
  147. Label l13 = new Label();
  148. mv.visitLabel(l13);
  149. mv.visitLineNumber(49, l13);
  150. mv.visitVarInsn(ALOAD, 8);
  151. mv.visitFieldInsn(GETFIELD, "org/objectweb/asm/tree/MethodNode", "name", "Ljava/lang/String;");
  152. mv.visitVarInsn(ALOAD, 4);
  153. mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "equals", "(Ljava/lang/Object;)Z", false);
  154. mv.visitJumpInsn(IFEQ, l10);
  155. mv.visitVarInsn(ALOAD, 8);
  156. mv.visitFieldInsn(GETFIELD, "org/objectweb/asm/tree/MethodNode", "desc", "Ljava/lang/String;");
  157. mv.visitLdcInsn("(F)V");
  158. mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "equals", "(Ljava/lang/Object;)Z", false);
  159. mv.visitJumpInsn(IFEQ, l10);
  160. Label l14 = new Label();
  161. mv.visitLabel(l14);
  162. mv.visitLineNumber(51, l14);
  163. mv.visitInsn(ACONST_NULL);
  164. mv.visitVarInsn(ASTORE, 10);
  165. Label l15 = new Label();
  166. mv.visitLabel(l15);
  167. mv.visitLineNumber(52, l15);
  168. mv.visitInsn(ACONST_NULL);
  169. mv.visitVarInsn(ASTORE, 11);
  170. Label l16 = new Label();
  171. mv.visitLabel(l16);
  172. mv.visitLineNumber(54, l16);
  173. mv.visitVarInsn(ALOAD, 8);
  174. mv.visitFieldInsn(GETFIELD, "org/objectweb/asm/tree/MethodNode", "instructions", "Lorg/objectweb/asm/tree/InsnList;");
  175. mv.visitMethodInsn(INVOKEVIRTUAL, "org/objectweb/asm/tree/InsnList", "iterator", "()Ljava/util/ListIterator;", false);
  176. mv.visitVarInsn(ASTORE, 12);
  177. Label l17 = new Label();
  178. mv.visitLabel(l17);
  179. mv.visitLineNumber(55, l17);
  180. mv.visitInsn(ICONST_M1);
  181. mv.visitVarInsn(ISTORE, 13);
  182. Label l18 = new Label();
  183. mv.visitLabel(l18);
  184. mv.visitLineNumber(57, l18);
  185. Label l19 = new Label();
  186. mv.visitJumpInsn(GOTO, l19);
  187. Label l20 = new Label();
  188. mv.visitLabel(l20);
  189. mv.visitLineNumber(59, l20);
  190. mv.visitFrame(Opcodes.F_FULL, 14, new Object[] {"fr/mcnanotech/nhg/asm/NHGClassTransformer", "java/lang/String", "[B", Opcodes.INTEGER, "java/lang/String", "org/objectweb/asm/tree/ClassNode", "org/objectweb/asm/ClassReader", "java/util/Iterator", "org/objectweb/asm/tree/MethodNode", Opcodes.INTEGER, "org/objectweb/asm/tree/AbstractInsnNode", "org/objectweb/asm/tree/AbstractInsnNode", "java/util/Iterator", Opcodes.INTEGER}, 0, new Object[] {});
  191. mv.visitIincInsn(13, 1);
  192. Label l21 = new Label();
  193. mv.visitLabel(l21);
  194. mv.visitLineNumber(60, l21);
  195. mv.visitVarInsn(ALOAD, 12);
  196. mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;", true);
  197. mv.visitTypeInsn(CHECKCAST, "org/objectweb/asm/tree/AbstractInsnNode");
  198. mv.visitVarInsn(ASTORE, 10);
  199. Label l22 = new Label();
  200. mv.visitLabel(l22);
  201. mv.visitLineNumber(62, l22);
  202. mv.visitVarInsn(ALOAD, 10);
  203. mv.visitMethodInsn(INVOKEVIRTUAL, "org/objectweb/asm/tree/AbstractInsnNode", "getOpcode", "()I", false);
  204. mv.visitIntInsn(BIPUSH, 110);
  205. mv.visitJumpInsn(IF_ICMPNE, l19);
  206. Label l23 = new Label();
  207. mv.visitLabel(l23);
  208. mv.visitLineNumber(64, l23);
  209. mv.visitVarInsn(ALOAD, 10);
  210. mv.visitVarInsn(ASTORE, 11);
  211. Label l24 = new Label();
  212. mv.visitLabel(l24);
  213. mv.visitLineNumber(65, l24);
  214. mv.visitVarInsn(ILOAD, 13);
  215. mv.visitVarInsn(ISTORE, 9);
  216. mv.visitLabel(l19);
  217. mv.visitLineNumber(57, l19);
  218. mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
  219. mv.visitVarInsn(ALOAD, 12);
  220. mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z", true);
  221. mv.visitJumpInsn(IFNE, l20);
  222. Label l25 = new Label();
  223. mv.visitLabel(l25);
  224. mv.visitLineNumber(69, l25);
  225. mv.visitVarInsn(ALOAD, 8);
  226. mv.visitFieldInsn(GETFIELD, "org/objectweb/asm/tree/MethodNode", "instructions", "Lorg/objectweb/asm/tree/InsnList;");
  227. mv.visitVarInsn(ILOAD, 9);
  228. mv.visitInsn(ICONST_2);
  229. mv.visitInsn(ISUB);
  230. mv.visitMethodInsn(INVOKEVIRTUAL, "org/objectweb/asm/tree/InsnList", "get", "(I)Lorg/objectweb/asm/tree/AbstractInsnNode;", false);
  231. mv.visitVarInsn(ASTORE, 14);
  232. Label l26 = new Label();
  233. mv.visitLabel(l26);
  234. mv.visitLineNumber(70, l26);
  235. mv.visitVarInsn(ALOAD, 8);
  236. mv.visitFieldInsn(GETFIELD, "org/objectweb/asm/tree/MethodNode", "instructions", "Lorg/objectweb/asm/tree/InsnList;");
  237. mv.visitVarInsn(ILOAD, 9);
  238. mv.visitInsn(ICONST_1);
  239. mv.visitInsn(ISUB);
  240. mv.visitMethodInsn(INVOKEVIRTUAL, "org/objectweb/asm/tree/InsnList", "get", "(I)Lorg/objectweb/asm/tree/AbstractInsnNode;", false);
  241. mv.visitVarInsn(ASTORE, 15);
  242. Label l27 = new Label();
  243. mv.visitLabel(l27);
  244. mv.visitLineNumber(71, l27);
  245. mv.visitVarInsn(ALOAD, 8);
  246. mv.visitFieldInsn(GETFIELD, "org/objectweb/asm/tree/MethodNode", "instructions", "Lorg/objectweb/asm/tree/InsnList;");
  247. mv.visitVarInsn(ILOAD, 9);
  248. mv.visitMethodInsn(INVOKEVIRTUAL, "org/objectweb/asm/tree/InsnList", "get", "(I)Lorg/objectweb/asm/tree/AbstractInsnNode;", false);
  249. mv.visitVarInsn(ASTORE, 16);
  250. Label l28 = new Label();
  251. mv.visitLabel(l28);
  252. mv.visitLineNumber(73, l28);
  253. mv.visitVarInsn(ALOAD, 8);
  254. mv.visitFieldInsn(GETFIELD, "org/objectweb/asm/tree/MethodNode", "instructions", "Lorg/objectweb/asm/tree/InsnList;");
  255. mv.visitVarInsn(ALOAD, 14);
  256. mv.visitMethodInsn(INVOKEVIRTUAL, "org/objectweb/asm/tree/InsnList", "remove", "(Lorg/objectweb/asm/tree/AbstractInsnNode;)V", false);
  257. Label l29 = new Label();
  258. mv.visitLabel(l29);
  259. mv.visitLineNumber(74, l29);
  260. mv.visitVarInsn(ALOAD, 8);
  261. mv.visitFieldInsn(GETFIELD, "org/objectweb/asm/tree/MethodNode", "instructions", "Lorg/objectweb/asm/tree/InsnList;");
  262. mv.visitVarInsn(ALOAD, 15);
  263. mv.visitMethodInsn(INVOKEVIRTUAL, "org/objectweb/asm/tree/InsnList", "remove", "(Lorg/objectweb/asm/tree/AbstractInsnNode;)V", false);
  264. Label l30 = new Label();
  265. mv.visitLabel(l30);
  266. mv.visitLineNumber(75, l30);
  267. mv.visitVarInsn(ALOAD, 8);
  268. mv.visitFieldInsn(GETFIELD, "org/objectweb/asm/tree/MethodNode", "instructions", "Lorg/objectweb/asm/tree/InsnList;");
  269. mv.visitVarInsn(ALOAD, 16);
  270. mv.visitMethodInsn(INVOKEVIRTUAL, "org/objectweb/asm/tree/InsnList", "remove", "(Lorg/objectweb/asm/tree/AbstractInsnNode;)V", false);
  271. Label l31 = new Label();
  272. mv.visitLabel(l31);
  273. mv.visitLineNumber(77, l31);
  274. mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
  275. mv.visitLdcInsn("Patching complete!");
  276. mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false);
  277. Label l32 = new Label();
  278. mv.visitLabel(l32);
  279. mv.visitLineNumber(78, l32);
  280. Label l33 = new Label();
  281. mv.visitJumpInsn(GOTO, l33);
  282. mv.visitLabel(l10);
  283. mv.visitLineNumber(44, l10);
  284. mv.visitFrame(Opcodes.F_FULL, 8, new Object[] {"fr/mcnanotech/nhg/asm/NHGClassTransformer", "java/lang/String", "[B", Opcodes.INTEGER, "java/lang/String", "org/objectweb/asm/tree/ClassNode", "org/objectweb/asm/ClassReader", "java/util/Iterator"}, 0, new Object[] {});
  285. mv.visitVarInsn(ALOAD, 7);
  286. mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z", true);
  287. mv.visitJumpInsn(IFNE, l11);
  288. mv.visitLabel(l33);
  289. mv.visitLineNumber(82, l33);
  290. mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
  291. mv.visitTypeInsn(NEW, "org/objectweb/asm/ClassWriter");
  292. mv.visitInsn(DUP);
  293. mv.visitInsn(ICONST_3);
  294. mv.visitMethodInsn(INVOKESPECIAL, "org/objectweb/asm/ClassWriter", "<init>", "(I)V", false);
  295. mv.visitVarInsn(ASTORE, 8);
  296. Label l34 = new Label();
  297. mv.visitLabel(l34);
  298. mv.visitLineNumber(83, l34);
  299. mv.visitVarInsn(ALOAD, 5);
  300. mv.visitVarInsn(ALOAD, 8);
  301. mv.visitMethodInsn(INVOKEVIRTUAL, "org/objectweb/asm/tree/ClassNode", "accept", "(Lorg/objectweb/asm/ClassVisitor;)V", false);
  302. Label l35 = new Label();
  303. mv.visitLabel(l35);
  304. mv.visitLineNumber(84, l35);
  305. mv.visitVarInsn(ALOAD, 8);
  306. mv.visitMethodInsn(INVOKEVIRTUAL, "org/objectweb/asm/ClassWriter", "toByteArray", "()[B", false);
  307. mv.visitInsn(ARETURN);
  308. Label l36 = new Label();
  309. mv.visitLabel(l36);
  310. mv.visitLocalVariable("this", "Lfr/mcnanotech/nhg/asm/NHGClassTransformer;", null, l0, l36, 0);
  311. mv.visitLocalVariable("nameClassVanilla", "Ljava/lang/String;", null, l0, l36, 1);
  312. mv.visitLocalVariable("byteCode", "[B", null, l0, l36, 2);
  313. mv.visitLocalVariable("obfuscated", "Z", null, l0, l36, 3);
  314. mv.visitLocalVariable("targetMethodName", "Ljava/lang/String;", null, l1, l36, 4);
  315. mv.visitLocalVariable("classNode", "Lorg/objectweb/asm/tree/ClassNode;", null, l6, l36, 5);
  316. mv.visitLocalVariable("classReader", "Lorg/objectweb/asm/ClassReader;", null, l7, l36, 6);
  317. mv.visitLocalVariable("methods", "Ljava/util/Iterator;", "Ljava/util/Iterator<Lorg/objectweb/asm/tree/MethodNode;>;", l9, l36, 7);
  318. mv.visitLocalVariable("m", "Lorg/objectweb/asm/tree/MethodNode;", null, l12, l10, 8);
  319. mv.visitLocalVariable("fdiv_index", "I", null, l13, l10, 9);
  320. mv.visitLocalVariable("currentNode", "Lorg/objectweb/asm/tree/AbstractInsnNode;", null, l15, l10, 10);
  321. mv.visitLocalVariable("targetNode", "Lorg/objectweb/asm/tree/AbstractInsnNode;", null, l16, l10, 11);
  322. mv.visitLocalVariable("iter", "Ljava/util/Iterator;", "Ljava/util/Iterator<Lorg/objectweb/asm/tree/AbstractInsnNode;>;", l17, l10, 12);
  323. mv.visitLocalVariable("index", "I", null, l18, l10, 13);
  324. mv.visitLocalVariable("remNode", "Lorg/objectweb/asm/tree/AbstractInsnNode;", null, l26, l10, 14);
  325. mv.visitLocalVariable("remNode1", "Lorg/objectweb/asm/tree/AbstractInsnNode;", null, l27, l10, 15);
  326. mv.visitLocalVariable("remNode2", "Lorg/objectweb/asm/tree/AbstractInsnNode;", null, l28, l10, 16);
  327. mv.visitLocalVariable("writer", "Lorg/objectweb/asm/ClassWriter;", null, l34, l36, 8);
  328. mv.visitMaxs(3, 17);
  329. mv.visitEnd();
  330. }
  331. cw.visitEnd();
  332.  
  333. return cw.toByteArray();
  334. }
  335. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement