ASM Disassembler

Better Failing. Decompile to zip fallback added.
This commit is contained in:
Konloch 2024-10-02 16:50:49 -06:00
parent 9391352953
commit f94c03d178

AI 샘플 코드 생성 중입니다

Loading...
2 changed files with 36 additions and 6 deletions

View File

@ -44,7 +44,7 @@ public enum Decompiler
JD_DECOMPILER(new JDGUIDecompiler()), //java decompiler JD_DECOMPILER(new JDGUIDecompiler()), //java decompiler
JADX_DECOMPILER(new JADXDecompiler()), //java decompiler JADX_DECOMPILER(new JADXDecompiler()), //java decompiler
ASM_TEXTIFY_DISASSEMBLER(new ASMTextifierDisassembler()), //bytecode disassembler ASM_TEXTIFY_DISASSEMBLER(new ASMDisassembler()), //bytecode disassembler
ASMIFIER_DECOMPILER(new ASMifierGenerator()), //bytecode disassembler / code gen ASMIFIER_DECOMPILER(new ASMifierGenerator()), //bytecode disassembler / code gen
JAVAP_DISASSEMBLER(new JavapDisassembler()); //bytecode disassembler JAVAP_DISASSEMBLER(new JavapDisassembler()); //bytecode disassembler

View File

@ -21,19 +21,27 @@ package the.bytecode.club.bytecodeviewer.decompilers.impl;
import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.ClassNode;
import org.objectweb.asm.util.Textifier; import org.objectweb.asm.util.Textifier;
import org.objectweb.asm.util.TraceClassVisitor; import org.objectweb.asm.util.TraceClassVisitor;
import the.bytecode.club.bytecodeviewer.Constants;
import the.bytecode.club.bytecodeviewer.api.ExceptionUI;
import the.bytecode.club.bytecodeviewer.decompilers.AbstractDecompiler; import the.bytecode.club.bytecodeviewer.decompilers.AbstractDecompiler;
import the.bytecode.club.bytecodeviewer.translation.TranslatedStrings;
import the.bytecode.club.bytecodeviewer.util.ExceptionUtils;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.StringWriter; import java.io.StringWriter;
import static the.bytecode.club.bytecodeviewer.Constants.NL;
import static the.bytecode.club.bytecodeviewer.translation.TranslatedStrings.DEV_MODE_SIMULATED_ERROR;
import static the.bytecode.club.bytecodeviewer.translation.TranslatedStrings.ERROR;
/** /**
* Objectweb ASM Textifier output * Objectweb ASM Textifier output
* *
* @author Thiakil * @author Thiakil
*/ */
public class ASMTextifierDisassembler extends AbstractDecompiler public class ASMDisassembler extends AbstractDecompiler
{ {
public ASMTextifierDisassembler() public ASMDisassembler()
{ {
super("ASM Disassembler", "asm"); super("ASM Disassembler", "asm");
} }
@ -41,13 +49,35 @@ public class ASMTextifierDisassembler extends AbstractDecompiler
@Override @Override
public String decompileClassNode(ClassNode cn, byte[] bytes) public String decompileClassNode(ClassNode cn, byte[] bytes)
{ {
StringWriter writer = new StringWriter(); String exception;
cn.accept(new TraceClassVisitor(null, new Textifier(), new PrintWriter(writer)));
return writer.toString(); try
{
//create writer
StringWriter writer = new StringWriter();
//initialize ASM-Textifier & parse class-file
cn.accept(new TraceClassVisitor(null, new Textifier(), new PrintWriter(writer)));
//handle simulated errors
if(Constants.DEV_FLAG_DECOMPILERS_SIMULATED_ERRORS)
throw new RuntimeException(DEV_MODE_SIMULATED_ERROR.toString());
//return writer contents
return writer.toString();
}
catch (Throwable e)
{
exception = ExceptionUtils.exceptionToString(e);
}
return "ASM Disassembler " + ERROR + "! " + ExceptionUI.SEND_STACKTRACE_TO + NL + NL
+ TranslatedStrings.SUGGESTED_FIX_DECOMPILER_ERROR + NL + NL + exception;
} }
@Override @Override
public void decompileToZip(String sourceJar, String zipName) public void decompileToZip(String sourceJar, String zipName)
{ {
decompileToZipFallBack(sourceJar, zipName);
} }
} }