Fixes and improvements

This commit is contained in:
SuspiciousActivity authored and GitHub committed 2020-11-25 23:53:58 +01:00
1 parent add82951e6
commit d8096a4ec5
4 files changed
+95 -39

No files matched your search

+4 -10
View File
@@ -691,11 +691,8 @@ public class Assembler {
int frameType = ClassUtil.getFrameTypeByName(asd); int frameType = ClassUtil.getFrameTypeByName(asd);
if (frameType != -1) if (frameType != -1)
arr.add(new Integer(frameType)); arr.add(new Integer(frameType));
else { else
String frame = UnicodeUtils.unescape(hsr, asd); arr.add(UnicodeUtils.unescape(hsr, asd.substring(1, asd.length() - 1)));
frame = frame.substring(1, frame.length() - 1);
arr.add(frame);
}
} else { } else {
if (asd.startsWith("(label) ")) { if (asd.startsWith("(label) ")) {
int labelNr = Integer.parseInt(asd.split(" ")[1]); int labelNr = Integer.parseInt(asd.split(" ")[1]);
@@ -737,11 +734,8 @@ public class Assembler {
int frameType = ClassUtil.getFrameTypeByName(asd); int frameType = ClassUtil.getFrameTypeByName(asd);
if (frameType != -1) if (frameType != -1)
arr.add(new Integer(frameType)); arr.add(new Integer(frameType));
else { else
String frame = UnicodeUtils.unescape(hsr, asd); arr.add(UnicodeUtils.unescape(hsr, asd.substring(1, asd.length() - 1)));
frame = frame.substring(1, frame.length() - 1);
arr.add(frame);
}
} else { } else {
if (asd.startsWith("(label) ")) { if (asd.startsWith("(label) ")) {
int labelNr = Integer.parseInt(asd.split(" ")[1]); int labelNr = Integer.parseInt(asd.split(" ")[1]);
+8 -2
View File
@@ -9,6 +9,7 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import org.objectweb.asm.Handle; import org.objectweb.asm.Handle;
@@ -40,6 +41,7 @@ import org.objectweb.asm.tree.TryCatchBlockNode;
import org.objectweb.asm.tree.TypeInsnNode; import org.objectweb.asm.tree.TypeInsnNode;
import org.objectweb.asm.tree.VarInsnNode; import org.objectweb.asm.tree.VarInsnNode;
import me.ByteEdit.main.Main;
import me.ByteEdit.utils.ClassUtil; import me.ByteEdit.utils.ClassUtil;
import me.ByteEdit.utils.OpcodesReverse; import me.ByteEdit.utils.OpcodesReverse;
import me.ByteEdit.utils.UnicodeUtils; import me.ByteEdit.utils.UnicodeUtils;
@@ -215,10 +217,11 @@ public class Disassembler {
private static String doMethods(List<MethodNode> methods, String className, Object nodeToFind, private static String doMethods(List<MethodNode> methods, String className, Object nodeToFind,
AtomicInteger lineFound, HugeStrings hs) throws InterruptedException, ExecutionException { AtomicInteger lineFound, HugeStrings hs) throws InterruptedException, ExecutionException {
boolean multithreaded = Main.INSTANCE.mntmMultithreaded.isSelected();
Future<String>[] futures = new Future[methods.size()]; Future<String>[] futures = new Future[methods.size()];
for (int i = 0; i < futures.length; i++) { for (int i = 0; i < futures.length; i++) {
MethodNode mn = methods.get(i); MethodNode mn = methods.get(i);
futures[i] = exec.submit(new Callable<String>() { Callable<String> callable = new Callable<String>() {
@Override @Override
public String call() throws Exception { public String call() throws Exception {
String ms = ""; String ms = "";
@@ -318,10 +321,13 @@ public class Disassembler {
} }
return ms; return ms;
} }
}); };
futures[i] = multithreaded ? exec.submit(callable) : new FutureTask<>(callable);
} }
StringContext ctx = new StringContext(futures.length); StringContext ctx = new StringContext(futures.length);
for (Future<String> f : futures) { for (Future<String> f : futures) {
if (f instanceof FutureTask)
((FutureTask) f).run();
ctx.next(f.get()); ctx.next(f.get());
} }
String s = ctx.finish(); String s = ctx.finish();
+1 -1
View File
@@ -8,7 +8,7 @@ import me.ByteEdit.utils.UnicodeUtils;
public class HugeStrings { public class HugeStrings {
public static final int THRESHOLD = 1000; public static int THRESHOLD = 1000;
private final HashMap<String, HugeData> map = new HashMap<>(); private final HashMap<String, HugeData> map = new HashMap<>();
public String onString(String s) { public String onString(String s) {
+82 -26
View File
@@ -37,6 +37,8 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JDialog; import javax.swing.JDialog;
import javax.swing.JFileChooser; import javax.swing.JFileChooser;
@@ -46,6 +48,7 @@ import javax.swing.JMenuBar;
import javax.swing.JMenuItem; import javax.swing.JMenuItem;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JScrollPane; import javax.swing.JScrollPane;
import javax.swing.JSplitPane; import javax.swing.JSplitPane;
import javax.swing.JTree; import javax.swing.JTree;
@@ -81,7 +84,6 @@ import org.objectweb.asm.tree.MethodNode;
import me.ByteEdit.boxes.CompilationBox; import me.ByteEdit.boxes.CompilationBox;
import me.ByteEdit.boxes.GlobalSearchBox; import me.ByteEdit.boxes.GlobalSearchBox;
import me.ByteEdit.boxes.OptionBox;
import me.ByteEdit.boxes.RenameBox; import me.ByteEdit.boxes.RenameBox;
import me.ByteEdit.boxes.SearchBox; import me.ByteEdit.boxes.SearchBox;
import me.ByteEdit.boxes.ThemeBox; import me.ByteEdit.boxes.ThemeBox;
@@ -90,6 +92,7 @@ import me.ByteEdit.boxes.UnicodeBox;
import me.ByteEdit.edit.Assembler; import me.ByteEdit.edit.Assembler;
import me.ByteEdit.edit.Disassembler; import me.ByteEdit.edit.Disassembler;
import me.ByteEdit.edit.Disassembler.DisassembleTuple; import me.ByteEdit.edit.Disassembler.DisassembleTuple;
import me.ByteEdit.edit.HugeStrings;
import me.ByteEdit.utils.ClassUtil; import me.ByteEdit.utils.ClassUtil;
import me.ByteEdit.utils.OpcodesReverse; import me.ByteEdit.utils.OpcodesReverse;
import me.ByteEdit.utils.UnicodeUtils; import me.ByteEdit.utils.UnicodeUtils;
@@ -107,7 +110,6 @@ public class Main extends JFrame {
public static GlobalSearchBox globalSearchBox; public static GlobalSearchBox globalSearchBox;
public static SearchBox searchBox; public static SearchBox searchBox;
public static TypeOpenBox typeOpenBox; public static TypeOpenBox typeOpenBox;
public static OptionBox optionBox;
public static UnicodeBox unicodeBox; public static UnicodeBox unicodeBox;
public static RenameBox renameBox; public static RenameBox renameBox;
public static CompilationBox compilationBox; public static CompilationBox compilationBox;
@@ -116,6 +118,32 @@ public class Main extends JFrame {
public static RTextScrollPane scrollPane_ByteEdit; public static RTextScrollPane scrollPane_ByteEdit;
public static File saveFolder; public static File saveFolder;
private static final Pattern SLASH = Pattern.compile("/");
private JMenuBar menuBar;
private JMenu mnFile;
private JMenuItem mntmOpenJar;
private JMenuItem mntmSaveBytecode;
private JMenuItem mntmSaveJar;
private JMenu mnWindow;
private JMenuItem mntmThemes;
private JMenuItem mntmSearchMembers;
private JMenuItem mntmSearch;
private JMenuItem mntmOpenType;
private JMenuItem mntmUnicode;
private JMenuItem mntmCompiler;
private JMenu mnSearch;
private JMenu mnOptions;
private JCheckBoxMenuItem mntmComputeFrames;
private JCheckBoxMenuItem mntmComputeMax;
private JMenu mnStringLimit;
private JRadioButtonMenuItem rdbtnmntm0;
private JMenuItem rdbtnmntm100;
private JMenuItem rdbtnmntm1000;
private JMenuItem rdbtnmntm500;
private JMenuItem rdbtnmntm5000;
private JMenuItem rdbtnmntm10000;
public JCheckBoxMenuItem mntmMultithreaded;
public static final Object treeLock = new Object(); public static final Object treeLock = new Object();
/** /**
@@ -209,7 +237,6 @@ public class Main extends JFrame {
globalSearchBox = new GlobalSearchBox(); globalSearchBox = new GlobalSearchBox();
searchBox = new SearchBox(); searchBox = new SearchBox();
typeOpenBox = new TypeOpenBox(); typeOpenBox = new TypeOpenBox();
optionBox = new OptionBox();
unicodeBox = new UnicodeBox(); unicodeBox = new UnicodeBox();
renameBox = new RenameBox(); renameBox = new RenameBox();
compilationBox = new CompilationBox(); compilationBox = new CompilationBox();
@@ -217,7 +244,6 @@ public class Main extends JFrame {
ThemeManager.registerFrames(globalSearchBox); ThemeManager.registerFrames(globalSearchBox);
ThemeManager.registerFrames(searchBox); ThemeManager.registerFrames(searchBox);
ThemeManager.registerFrames(typeOpenBox); ThemeManager.registerFrames(typeOpenBox);
ThemeManager.registerFrames(optionBox);
ThemeManager.registerFrames(unicodeBox); ThemeManager.registerFrames(unicodeBox);
ThemeManager.registerFrames(renameBox); ThemeManager.registerFrames(renameBox);
ThemeManager.registerFrames(compilationBox); ThemeManager.registerFrames(compilationBox);
@@ -278,7 +304,6 @@ public class Main extends JFrame {
globalSearchBox.setVisible(false); globalSearchBox.setVisible(false);
searchBox.setVisible(false); searchBox.setVisible(false);
typeOpenBox.setVisible(false); typeOpenBox.setVisible(false);
optionBox.setVisible(false);
unicodeBox.setVisible(false); unicodeBox.setVisible(false);
renameBox.setVisible(false); renameBox.setVisible(false);
compilationBox.setVisible(false); compilationBox.setVisible(false);
@@ -336,6 +361,56 @@ public class Main extends JFrame {
mntmCompiler = new JMenuItem("Compiler"); mntmCompiler = new JMenuItem("Compiler");
mntmCompiler.addActionListener(e -> compilationBox.setVisible(true)); mntmCompiler.addActionListener(e -> compilationBox.setVisible(true));
mnWindow.add(mntmCompiler); mnWindow.add(mntmCompiler);
mnOptions = new JMenu("Options");
menuBar.add(mnOptions);
mntmComputeFrames = new JCheckBoxMenuItem("Compute Frames");
mnOptions.add(mntmComputeFrames);
mntmComputeMax = new JCheckBoxMenuItem("Compute Max");
mnOptions.add(mntmComputeMax);
mntmMultithreaded = new JCheckBoxMenuItem("Multithreaded");
mntmMultithreaded.setSelected(true);
mnOptions.add(mntmMultithreaded);
mnStringLimit = new JMenu("Huge String Limit");
mnOptions.add(mnStringLimit);
rdbtnmntm0 = new JRadioButtonMenuItem("0");
rdbtnmntm0.addActionListener(e -> HugeStrings.THRESHOLD = 0);
mnStringLimit.add(rdbtnmntm0);
rdbtnmntm100 = new JRadioButtonMenuItem("100");
rdbtnmntm100.addActionListener(e -> HugeStrings.THRESHOLD = 100);
mnStringLimit.add(rdbtnmntm100);
rdbtnmntm500 = new JRadioButtonMenuItem("500");
rdbtnmntm500.addActionListener(e -> HugeStrings.THRESHOLD = 500);
mnStringLimit.add(rdbtnmntm500);
rdbtnmntm1000 = new JRadioButtonMenuItem("1000");
rdbtnmntm1000.addActionListener(e -> HugeStrings.THRESHOLD = 1000);
rdbtnmntm1000.setSelected(true);
mnStringLimit.add(rdbtnmntm1000);
rdbtnmntm5000 = new JRadioButtonMenuItem("5000");
rdbtnmntm5000.addActionListener(e -> HugeStrings.THRESHOLD = 5000);
mnStringLimit.add(rdbtnmntm5000);
rdbtnmntm10000 = new JRadioButtonMenuItem("10000");
rdbtnmntm10000.addActionListener(e -> HugeStrings.THRESHOLD = 10000);
mnStringLimit.add(rdbtnmntm10000);
ButtonGroup group = new ButtonGroup();
group.add(rdbtnmntm0);
group.add(rdbtnmntm100);
group.add(rdbtnmntm500);
group.add(rdbtnmntm1000);
group.add(rdbtnmntm5000);
group.add(rdbtnmntm10000);
contentPane = new JPanel(); contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane); setContentPane(contentPane);
@@ -472,7 +547,6 @@ public class Main extends JFrame {
globalSearchBox.setVisible(false); globalSearchBox.setVisible(false);
searchBox.setVisible(false); searchBox.setVisible(false);
typeOpenBox.setVisible(false); typeOpenBox.setVisible(false);
optionBox.setVisible(false);
unicodeBox.setVisible(false); unicodeBox.setVisible(false);
renameBox.setVisible(false); renameBox.setVisible(false);
compilationBox.setVisible(false); compilationBox.setVisible(false);
@@ -551,7 +625,6 @@ public class Main extends JFrame {
KeyStroke ctrlT = KeyStroke.getKeyStroke(KeyEvent.VK_T, KeyEvent.CTRL_DOWN_MASK); KeyStroke ctrlT = KeyStroke.getKeyStroke(KeyEvent.VK_T, KeyEvent.CTRL_DOWN_MASK);
KeyStroke ctrlS = KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.CTRL_DOWN_MASK); KeyStroke ctrlS = KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.CTRL_DOWN_MASK);
KeyStroke ctrlG = KeyStroke.getKeyStroke(KeyEvent.VK_G, KeyEvent.CTRL_DOWN_MASK); KeyStroke ctrlG = KeyStroke.getKeyStroke(KeyEvent.VK_G, KeyEvent.CTRL_DOWN_MASK);
KeyStroke ctrlO = KeyStroke.getKeyStroke(KeyEvent.VK_O, KeyEvent.CTRL_DOWN_MASK);
KeyStroke ctrlU = KeyStroke.getKeyStroke(KeyEvent.VK_U, KeyEvent.CTRL_DOWN_MASK); KeyStroke ctrlU = KeyStroke.getKeyStroke(KeyEvent.VK_U, KeyEvent.CTRL_DOWN_MASK);
KeyStroke ctrlR = KeyStroke.getKeyStroke(KeyEvent.VK_R, KeyEvent.CTRL_DOWN_MASK); KeyStroke ctrlR = KeyStroke.getKeyStroke(KeyEvent.VK_R, KeyEvent.CTRL_DOWN_MASK);
KeyStroke ctrlE = KeyStroke.getKeyStroke(KeyEvent.VK_E, KeyEvent.CTRL_DOWN_MASK); KeyStroke ctrlE = KeyStroke.getKeyStroke(KeyEvent.VK_E, KeyEvent.CTRL_DOWN_MASK);
@@ -574,8 +647,6 @@ public class Main extends JFrame {
typeOpenBox.txtSearch.requestFocusInWindow(); typeOpenBox.txtSearch.requestFocusInWindow();
typeOpenBox.txtSearch.select(0, typeOpenBox.txtSearch.getText().length()); typeOpenBox.txtSearch.select(0, typeOpenBox.txtSearch.getText().length());
}, ctrlT, JComponent.WHEN_IN_FOCUSED_WINDOW); }, ctrlT, JComponent.WHEN_IN_FOCUSED_WINDOW);
txtByteEditView.registerKeyboardAction(e -> optionBox.setVisible(true), ctrlO,
JComponent.WHEN_IN_FOCUSED_WINDOW);
txtByteEditView.registerKeyboardAction(e -> unicodeBox.setVisible(true), ctrlU, txtByteEditView.registerKeyboardAction(e -> unicodeBox.setVisible(true), ctrlU,
JComponent.WHEN_IN_FOCUSED_WINDOW); JComponent.WHEN_IN_FOCUSED_WINDOW);
txtByteEditView.registerKeyboardAction(e -> compilationBox.setVisible(true), ctrlE, txtByteEditView.registerKeyboardAction(e -> compilationBox.setVisible(true), ctrlE,
@@ -901,10 +972,10 @@ public class Main extends JFrame {
output.closeEntry(); output.closeEntry();
} }
int computeFlags = 0; int computeFlags = 0;
if (optionBox.chckbxComputeFrames.isSelected()) { if (mntmComputeFrames.isSelected()) {
computeFlags |= ClassWriter.COMPUTE_FRAMES; computeFlags |= ClassWriter.COMPUTE_FRAMES;
} }
if (optionBox.chckbxComputeMax.isSelected()) { if (mntmComputeMax.isSelected()) {
computeFlags |= ClassWriter.COMPUTE_MAXS; computeFlags |= ClassWriter.COMPUTE_MAXS;
} }
for (ClassNode node : classes) { for (ClassNode node : classes) {
@@ -941,21 +1012,6 @@ public class Main extends JFrame {
return s + ".class"; return s + ".class";
} }
private static final Pattern SLASH = Pattern.compile("/");
private JMenuBar menuBar;
private JMenu mnFile;
private JMenuItem mntmOpenJar;
private JMenuItem mntmSaveBytecode;
private JMenuItem mntmSaveJar;
private JMenu mnWindow;
private JMenuItem mntmThemes;
private JMenuItem mntmSearchMembers;
private JMenuItem mntmSearch;
private JMenuItem mntmOpenType;
private JMenuItem mntmUnicode;
private JMenuItem mntmCompiler;
private JMenu mnSearch;
class ArchiveTreeModel extends DefaultTreeModel { class ArchiveTreeModel extends DefaultTreeModel {
public ArrayList<String> paths = new ArrayList<>(); public ArrayList<String> paths = new ArrayList<>();