Javap Fixes

Because of the design of using sysout it fails when being ran concurrently. Until the system has been redesigned to not use sysout (or a better solution for it is added) I've synchronized the javap disassembler

thankfully javap is fast so this shouldn't be that noticeable but it should be fixed one day
This commit is contained in:
Konloch 2021-07-13 03:35:48 -07:00
parent e9f3163e1b
commit 67e2e0dfd0
3 changed files with 41 additions and 43 deletions

View file

@ -1,28 +1,21 @@
package the.bytecode.club.bytecodeviewer.decompilers.impl;
import me.konloch.kontainer.io.DiskReader;
import me.konloch.kontainer.io.DiskWriter;
import org.objectweb.asm.tree.ClassNode;
import org.objectweb.asm.util.Textifier;
import org.objectweb.asm.util.TraceClassVisitor;
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
import the.bytecode.club.bytecodeviewer.Configuration;
import the.bytecode.club.bytecodeviewer.Constants;
import the.bytecode.club.bytecodeviewer.decompilers.InternalDecompiler;
import the.bytecode.club.bytecodeviewer.gui.components.JFrameConsolePrintStream;
import the.bytecode.club.bytecodeviewer.gui.components.SystemConsole;
import the.bytecode.club.bytecodeviewer.resources.ExternalResources;
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
import java.io.File;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import static the.bytecode.club.bytecodeviewer.Constants.fs;
import static the.bytecode.club.bytecodeviewer.api.ExceptionUI.KONLOCH;
import static the.bytecode.club.bytecodeviewer.api.ExceptionUI.SEND_STACKTRACE_TO;
/***************************************************************************
@ -60,10 +53,15 @@ public class JavapDisassembler extends InternalDecompiler
if(!ExternalResources.getSingleton().hasJavaToolsSet())
return "Set Java Tools Path!";
return synchronizedDecompilation(cn, b);
}
private synchronized String synchronizedDecompilation(ClassNode cn, byte[] b)
{
final File tempDirectory = new File(Constants.tempDirectory + fs + MiscUtils.randomString(32) + fs);
tempDirectory.mkdir();
final File tempClass = new File(Constants.tempDirectory + fs + "temp" + MiscUtils.randomString(32) + ".class");
DiskWriter.replaceFileBytes(tempClass.getAbsolutePath(), b, false);
JFrameConsolePrintStream sysOutBuffer = null;
@ -74,18 +72,18 @@ public class JavapDisassembler extends InternalDecompiler
new URL[] {new File(Configuration.javaTools).toURI().toURL()},
this.getClass().getClassLoader()
);
//setup reflection
Class<?> javap = child.loadClass("com.sun.tools.javap.Main");
Method main = javap.getMethod("main", String[].class);
Object cl = javap.newInstance();
//pipe sys out
sysOutBuffer = new JFrameConsolePrintStream("", false);
//silence security manager debugging
BytecodeViewer.sm.silenceExec(true);
//invoke Javap
main.invoke(cl, (Object) new String[]{
"-p", //Shows all classes and members
@ -103,13 +101,13 @@ public class JavapDisassembler extends InternalDecompiler
BytecodeViewer.sm.silenceExec(false);
tempClass.delete();
}
if(sysOutBuffer != null)
{
sysOutBuffer.finished();
return sysOutBuffer.getTextAreaOutputStreamOut().getBuffer().toString();
}
return SEND_STACKTRACE_TO;
}

View file

@ -14,11 +14,9 @@
"RECENT_FILES": "最近的文件",
"ABOUT": "关于",
"EXIT": "退出",
"VIEW": "视图",
"VISUAL_SETTINGS": "界面设置",
"LANGUAGE": "语言",
"WINDOW_THEME": "窗口主题",
"SYSTEM_THEME": "系统主题",
"DARK_THEME": "深色主题",
@ -32,19 +30,16 @@
"VISUAL_STUDIO": "Visual Studio",
"DRUID_DARK": "Druid (深色)",
"MONOKAI_DARK": "Monokai (深色)",
"FONT_SIZE": "字体大小",
"SHOW_TAB_FILE_IN_TAB_TITLE": "标签页标题显示文件名",
"SIMPLIFY_NAME_IN_TAB_TITLE": "简化标签页标题文件名",
"SYNCHRONIZED_VIEWING": "同步视图",
"SHOW_CLASS_METHODS": "显示类方法",
"PANE_1": "面板 1",
"PANE_2": "面板 2",
"PANE_3": "面板 3",
"NONE": "无",
"EDITABLE": "可编辑",
"SETTINGS": "设置",
"COMPILE_ON_SAVE": "保存时编译",
"COMPILE_ON_REFRESH": "刷新时编译",
@ -61,7 +56,6 @@
"SET_JRE_RT_LIBRARY": "设置 JRE RT 库",
"SET_OPTIONAL_LIBRARY_FOLDER": "设置可选的库文件夹",
"SET_JAVAC_EXECUTABLE": "设置 Javac 可执行文件",
"JAVA": "Java",
"PROCYON": "Procyon",
"CFR": "CFR",
@ -74,11 +68,9 @@
"HEXCODE": "十六进制",
"BYTECODE": "字节码",
"ASM_TEXTIFY": "汇编文本",
"BYTECODE_DECOMPILER": "字节码反编译器",
"DEBUG_HELPERS": "调试辅助器",
"APPEND_BRACKETS_TO_LABEL": "标签带花括号",
"PLUGINS": "插件",
"OPEN_PLUGIN": "打开插件…",
"RECENT_PLUGINS": "最近的插件",
@ -91,7 +83,6 @@
"ZKM_STRING_DECRYPTER": "ZKM 字符串解密器",
"ALLATORI_STRING_DECRYPTER": "Allatori 字符串解密器",
"ZSTRINGARRAY_DECRYPTER": "ZStringArray 解密器",
"PROCYON_DECOMPILER": "Procyon 反编译器",
"CFR_DECOMPILER": "CFR 反编译器",
"FERNFLOWER_DECOMPILER": "FernFlower 反编译器",
@ -99,14 +90,12 @@
"JD_DECOMPILER": "JD-GUI 反编译器",
"BYTECODE_DISASSEMBLER": "字节码反汇编",
"DISASSEMBLER": "反汇编",
"ERROR": "错误",
"NEW_JAVA_PLUGIN": "新 Java 插件",
"NEW_JAVASCRIPT_PLUGIN": "新 Javascript 插件",
"SUGGESTED_FIX_DECOMPILER_ERROR": "建议的办法:单击刷新类。如果又失败请尝试别的反编译器。",
"SUGGESTED_FIX_COMPILER_ERROR": "建议的办法:尝试“视图>面板>Krakatau>字节码”并启用可编辑。",
"SUGGESTED_FIX_COMPILER_ERROR": "建议的办法:尝试“视图>面板>Krakatau>字节码”并启用可编辑。",
"DRAG_CLASS_JAR": "拖放 class/jar/zip/APK/DEX 到这",
"FILES": "文件",
"QUICK_FILE_SEARCH_NO_FILE_EXTENSION": "快速文件搜索 (无扩展名)",
"WORK_SPACE": "工作区",
@ -121,5 +110,18 @@
"DESC": "描述:",
"SAVE_AS": "另存为…",
"RESULTS": "结果",
"SAVE": "保存…"
"SAVE": "保存…",
"HIGH_CONTRAST_LIGHT": "高对比度灯",
"DARK_ALT": "暗Alt",
"ONE_DARK_THEME": "一个黑暗主题",
"HIGH_CONTRAST_DARK_THEME": "高对比度深色主题",
"DARK": "深色(推荐深色)",
"ONE_DARK": "一个黑暗",
"SOLARIZED_DARK": "日晒黑暗",
"SOLARIZED_DARK_THEME": "Solarized 黑暗主题",
"SOLARIZED_LIGHT_THEME": "Solarized Light 主题",
"THEME_MATCH": "主题搭配(推荐)",
"SOLARIZED_LIGHT": "日光灯",
"HIGH_CONTRAST_DARK": "高对比度暗",
"HIGH_CONTRAST_LIGHT_THEME": "高对比度灯光主题"
}

View file

@ -14,12 +14,9 @@
"RECENT_FILES": "Недавние файлы",
"ABOUT": "О программе",
"EXIT": "Выход",
"VIEW": "Вид",
"VISUAL_SETTINGS": "Визуальные настройки",
"LANGUAGE": "Язык",
"WINDOW_THEME": "Тема окна",
"SYSTEM_THEME": "Системная тема",
"DARK_THEME": "Темная тема",
@ -33,20 +30,16 @@
"VISUAL_STUDIO": "Visual Studio",
"DRUID_DARK": "Druid (Темная)",
"MONOKAI_DARK": "Monokai (Темная)",
"FONT_SIZE": "Размер шрифта",
"SHOW_TAB_FILE_IN_TAB_TITLE": "Показать файл в заголовке вкладки",
"SIMPLIFY_NAME_IN_TAB_TITLE": "Упростить имя в заголовке вкладки",
"SYNCHRONIZED_VIEWING": "Синхронизировать просмотр",
"SHOW_CLASS_METHODS": "Показать методы класса",
"PANE_1": "Панель 1",
"PANE_2": "Панель 2",
"PANE_3": "Панель 3",
"NONE": "Нет",
"EDITABLE": "Редактируемый",
"SETTINGS": "Настройки",
"COMPILE_ON_SAVE": "Скомпилировать при сохранении",
"COMPILE_ON_REFRESH": "Скомпилировать при обновлении",
@ -63,7 +56,6 @@
"SET_JRE_RT_LIBRARY": "Указать библиотеку JRE RT",
"SET_OPTIONAL_LIBRARY_FOLDER": "Указать папку дополнительных библиотек",
"SET_JAVAC_EXECUTABLE": "Указать исполняемый файл Javac",
"JAVA": "Java",
"PROCYON": "Procyon",
"CFR": "CFR",
@ -76,11 +68,9 @@
"HEXCODE": "Шестнадцатеричный код",
"BYTECODE": "Байт-код",
"ASM_TEXTIFY": "ASM Textify",
"BYTECODE_DECOMPILER": "Декомпилятор байт-кода",
"DEBUG_HELPERS": "Помощники отладки",
"APPEND_BRACKETS_TO_LABEL": "Добавить скобки к названию",
"PLUGINS": "Плагины",
"OPEN_PLUGIN": "Открыть плагин ...",
"RECENT_PLUGINS": "Недавние плагины",
@ -93,9 +83,6 @@
"ZKM_STRING_DECRYPTER": "Расшифровать строки (ZKM)",
"ALLATORI_STRING_DECRYPTER": "Расшифровать строки (Allatori)",
"ZSTRINGARRAY_DECRYPTER": "Расшифровать (ZStringArray)",
"PROCYON_DECOMPILER": "Декомпилятор Procyon",
"CFR_DECOMPILER": "Декомпилятор CFR",
"FERNFLOWER_DECOMPILER": "Декомпилятор FernFlower",
@ -103,14 +90,12 @@
"JD_DECOMPILER": "Декомпилятор JD-GUI",
"BYTECODE_DISASSEMBLER": "Дизассемблер байт-кода",
"DISASSEMBLER": "Дизассемблер",
"ERROR": "Ошибка",
"NEW_JAVA_PLUGIN": "Новый плагин Java",
"NEW_JAVASCRIPT_PLUGIN": "Новый плагин Javascript",
"SUGGESTED_FIX_DECOMPILER_ERROR": "Предлагаемое исправление: нажмите «Обновить класс», если не получится снова, то попробуйте другой декомпилятор.",
"SUGGESTED_FIX_COMPILER_ERROR": "Предлагаемое исправление: попробуйте «Вид»> «Панель»> «Krakatau»> «Байт-код» и включите «Редактируемый».",
"DRAG_CLASS_JAR": "Перетащите сюда class / jar / zip / APK / DEX",
"FILES": "Файлы",
"QUICK_FILE_SEARCH_NO_FILE_EXTENSION": "Быстрый поиск файлов (без расширения)",
"WORK_SPACE": "Рабочее пространство",
@ -122,8 +107,21 @@
"OWNER": "Владелец: ",
"NAME": "Имя: ",
"DESC": "Описание: ",
"SAVE": "Сохранить..."
"SAVE": "Сохранить...",
"SAVE_AS": "Сохранить как...",
"RESULTS": "Полученные результаты",
"REFRESH": "Обновить",
"HIGH_CONTRAST_LIGHT": "Высококонтрастный свет",
"DARK_ALT": "Темный-Альт",
"ONE_DARK_THEME": "Одна темная тема",
"HIGH_CONTRAST_DARK_THEME": "Темная тема с высокой контрастностью",
"DARK": "Темный (рекомендуется темный)",
"ONE_DARK": "Один темный",
"SOLARIZED_DARK": "Соляризованная тьма",
"SOLARIZED_DARK_THEME": "Соляризованная темная тема",
"SOLARIZED_LIGHT_THEME": "Тема солнечного света",
"THEME_MATCH": "Соответствие темы (рекомендуется)",
"SOLARIZED_LIGHT": "Соляризованный свет",
"HIGH_CONTRAST_DARK": "Высококонтрастный темный",
"HIGH_CONTRAST_LIGHT_THEME": "Тема с высокой контрастностью света"
}