From 631778e95bd72f7d67c432a0e70fd65ac5d1f12c Mon Sep 17 00:00:00 2001 From: SuspiciousActivity <38253929+SuspiciousActivity@users.noreply.github.com> Date: Sun, 22 Apr 2018 13:23:43 +0200 Subject: [PATCH] Added supporter for JSR/RET and class signature --- src/me/ByteEdit/main/Assembler.java | 18 +++++++++++++++++- src/me/ByteEdit/main/Disassembler.java | 1 + src/me/ByteEdit/main/OpcodesReverse.java | 4 ++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/me/ByteEdit/main/Assembler.java b/src/me/ByteEdit/main/Assembler.java index 4cfb2a6..145e905 100644 --- a/src/me/ByteEdit/main/Assembler.java +++ b/src/me/ByteEdit/main/Assembler.java @@ -61,7 +61,9 @@ public class Assembler { clazz.version = Integer.parseInt(s.substring(12)); while ((s = read.readLine()).startsWith("// ")) { - if (s.startsWith("// #OuterClass: ")) { + if (s.startsWith("// #Signature: ")) { + clazz.signature = s.substring(15).equals("null") ? null : s.substring(15); + } else if (s.startsWith("// #OuterClass: ")) { clazz.outerClass = s.substring(16).equals("null") ? null : s.substring(16); } else if (s.equals("// #InnerClasses:")) { clazz.innerClasses = new ArrayList<>(); @@ -1156,6 +1158,20 @@ public class Assembler { labels.put(l, labelNr); return new JumpInsnNode(167, new LabelNode(l)); } + case "jsr": { + int labelNr = Integer.parseInt(s.split(" ")[1]); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new JumpInsnNode(167, new LabelNode(entry.getKey())); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new JumpInsnNode(168, new LabelNode(l)); + } + case "ret": { + return new VarInsnNode(167, Integer.parseInt(s.split(" ")[1])); + } case "tableswitch": { String str = s.substring(14, s.length() - 2).replace("\t", ""); String split2[] = str.split("\n"); diff --git a/src/me/ByteEdit/main/Disassembler.java b/src/me/ByteEdit/main/Disassembler.java index 9fac988..0f451ac 100644 --- a/src/me/ByteEdit/main/Disassembler.java +++ b/src/me/ByteEdit/main/Disassembler.java @@ -98,6 +98,7 @@ public class Disassembler { s += "\n"; } } + s += "// #Signature: " + classNode.signature + "\n"; s += "// #Class v:" + classNode.version + "\n"; s += "// #OuterClass: " + classNode.outerClass + "\n"; s += "// #InnerClasses:\n"; diff --git a/src/me/ByteEdit/main/OpcodesReverse.java b/src/me/ByteEdit/main/OpcodesReverse.java index d7e9546..4e3272e 100644 --- a/src/me/ByteEdit/main/OpcodesReverse.java +++ b/src/me/ByteEdit/main/OpcodesReverse.java @@ -256,6 +256,10 @@ public class OpcodesReverse { return "if_acmpne"; case 167: return "goto"; + case 168: + return "jsr"; + case 169: + return "ret"; case 170: return "tableswitch"; case 171: