protected String printVarInsnNode(VarInsnNode vin, ListIterator<?> it) { StringBuilder sb = new StringBuilder(); sb.append(nameOpcode(vin.opcode())); sb.append(vin.var); if (Decompiler.BYTECODE.getSettings().isSelected(ClassNodeDecompiler.Settings.DEBUG_HELPERS)) { if (vin.var == 0 && !Modifier.isStatic(mNode.access)) { sb.append(" // reference to self"); } else { final int refIndex = vin.var - (Modifier.isStatic(mNode.access) ? 0 : 1); if (refIndex >= 0 && refIndex < args.length - 1) { sb.append(" // reference to " + args[refIndex].name); } } } return sb.toString(); }
@Override public void execute(ArrayList<ClassNode> classNodeList) { JOptionPane pane = new JOptionPane( "WARNING: This will load the classes into the JVM and execute allatori decrypter function" + BytecodeViewer.nl + "for each class. IF THE FILE YOU'RE LOADING IS MALICIOUS, DO NOT CONTINUE."); Object[] options = new String[] {"Continue", "Cancel"}; pane.setOptions(options); JDialog dialog = pane.createDialog(BytecodeViewer.viewer, "Bytecode Viewer - WARNING"); dialog.setVisible(true); Object obj = pane.getValue(); int result = -1; for (int k = 0; k < options.length; k++) if (options[k].equals(obj)) result = k; if (result == 0) { try { if (!className.equals("*")) { for (ClassNode classNode : classNodeList) { if (classNode.name.equals(className)) scanClassNode(classNode); } } else { for (ClassNode classNode : classNodeList) { scanClassNode(classNode); } } } catch (Exception e) { new ExceptionUI(e, "github.com/Szperak"); } finally { frame.appendText(out.toString()); frame.setVisible(true); } } }
protected String printMethodInsnNode(MethodInsnNode min, ListIterator<?> it) { StringBuilder sb = new StringBuilder(); sb.append(nameOpcode(min.opcode()) + " " + min.owner + " " + min.name + "("); String desc = min.desc; try { if (Type.getType(min.desc) != null) desc = Type.getType(min.desc).getClassName(); if (desc == null || desc.equals("null")) desc = min.desc; } catch (java.lang.ArrayIndexOutOfBoundsException e) { } sb.append(desc); sb.append(");"); return sb.toString(); }
protected String printInvokeDynamicInsNode(InvokeDynamicInsnNode idin) { StringBuilder sb = new StringBuilder(); sb.append(nameOpcode(idin.opcode()) + " " + idin.bsm.getName() + "("); String desc = idin.desc; String partedDesc = idin.desc.substring(2); try { if (Type.getType(partedDesc) != null) desc = Type.getType(partedDesc).getClassName(); if (desc == null || desc.equals("null")) desc = idin.desc; } catch (java.lang.ArrayIndexOutOfBoundsException e) { } sb.append(desc); sb.append(");"); return sb.toString(); }