Compiler & Assembler Cleanup
This commit is contained in:
parent
efaae70d36
commit
eadd35174e
9 changed files with 74 additions and 29 deletions
|
@ -7,7 +7,6 @@ import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
@ -17,7 +16,7 @@ import org.apache.commons.io.FileUtils;
|
||||||
import org.objectweb.asm.tree.ClassNode;
|
import org.objectweb.asm.tree.ClassNode;
|
||||||
import the.bytecode.club.bootloader.Boot;
|
import the.bytecode.club.bootloader.Boot;
|
||||||
import the.bytecode.club.bytecodeviewer.api.ClassNodeLoader;
|
import the.bytecode.club.bytecodeviewer.api.ClassNodeLoader;
|
||||||
import the.bytecode.club.bytecodeviewer.compilers.Compilers;
|
import the.bytecode.club.bytecodeviewer.compilers.Compiler;
|
||||||
import the.bytecode.club.bytecodeviewer.gui.components.DecompilerViewComponent;
|
import the.bytecode.club.bytecodeviewer.gui.components.DecompilerViewComponent;
|
||||||
import the.bytecode.club.bytecodeviewer.gui.components.FileChooser;
|
import the.bytecode.club.bytecodeviewer.gui.components.FileChooser;
|
||||||
import the.bytecode.club.bytecodeviewer.gui.resourceviewer.ResourcePanelCompileMode;
|
import the.bytecode.club.bytecodeviewer.gui.resourceviewer.ResourcePanelCompileMode;
|
||||||
|
@ -87,6 +86,7 @@ import static the.bytecode.club.bytecodeviewer.Constants.*;
|
||||||
* + Krakatau Assembly compile - Needs to be fixed
|
* + Krakatau Assembly compile - Needs to be fixed
|
||||||
*
|
*
|
||||||
* TODO IN-PROGRESS:
|
* TODO IN-PROGRESS:
|
||||||
|
* + Finish Compiler.JAVA_COMPILER
|
||||||
* + Finish dragging code
|
* + Finish dragging code
|
||||||
* + Finish right-click tab menu detection
|
* + Finish right-click tab menu detection
|
||||||
* + Fix hook inject for EZ-Injection
|
* + Fix hook inject for EZ-Injection
|
||||||
|
@ -411,7 +411,7 @@ public class BytecodeViewer
|
||||||
{
|
{
|
||||||
ClassNode origNode = (ClassNode) smali[0];
|
ClassNode origNode = (ClassNode) smali[0];
|
||||||
String smaliText = (String) smali[1];
|
String smaliText = (String) smali[1];
|
||||||
byte[] smaliCompiled = Compilers.smali.compile(smaliText, origNode.name);
|
byte[] smaliCompiled = Compiler.SMALI_ASSEMBLER.getCompiler().compile(smaliText, origNode.name);
|
||||||
|
|
||||||
if (smaliCompiled != null)
|
if (smaliCompiled != null)
|
||||||
{
|
{
|
||||||
|
@ -443,7 +443,7 @@ public class BytecodeViewer
|
||||||
{
|
{
|
||||||
ClassNode origNode = (ClassNode) krakatau[0];
|
ClassNode origNode = (ClassNode) krakatau[0];
|
||||||
String krakatauText = (String) krakatau[1];
|
String krakatauText = (String) krakatau[1];
|
||||||
byte[] krakatauCompiled = Compilers.krakatau.compile(krakatauText, origNode.name);
|
byte[] krakatauCompiled = Compiler.KRAKATAU_ASSEMBLER.getCompiler().compile(krakatauText, origNode.name);
|
||||||
|
|
||||||
if (krakatauCompiled != null)
|
if (krakatauCompiled != null)
|
||||||
{
|
{
|
||||||
|
@ -479,7 +479,7 @@ public class BytecodeViewer
|
||||||
errConsole.setText("Error compiling class: " + origNode.name + nl + "Keep in mind most "
|
errConsole.setText("Error compiling class: " + origNode.name + nl + "Keep in mind most "
|
||||||
+ "decompilers cannot produce compilable classes" + nl + nl);
|
+ "decompilers cannot produce compilable classes" + nl + nl);
|
||||||
|
|
||||||
byte[] javaCompiled = Compilers.java.compile(javaText, origNode.name);
|
byte[] javaCompiled = Compiler.JAVA_COMPILER.getCompiler().compile(javaText, origNode.name);
|
||||||
if (javaCompiled != null)
|
if (javaCompiled != null)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -9,7 +9,8 @@ import java.util.List;
|
||||||
import java.util.jar.JarEntry;
|
import java.util.jar.JarEntry;
|
||||||
import java.util.jar.JarFile;
|
import java.util.jar.JarFile;
|
||||||
import org.objectweb.asm.tree.ClassNode;
|
import org.objectweb.asm.tree.ClassNode;
|
||||||
import the.bytecode.club.bytecodeviewer.compilers.Compilers;
|
import the.bytecode.club.bytecodeviewer.compilers.Compiler;
|
||||||
|
import the.bytecode.club.bytecodeviewer.compilers.InternalCompiler;
|
||||||
import the.bytecode.club.bytecodeviewer.decompilers.InternalDecompiler;
|
import the.bytecode.club.bytecodeviewer.decompilers.InternalDecompiler;
|
||||||
import the.bytecode.club.bytecodeviewer.decompilers.Decompiler;
|
import the.bytecode.club.bytecodeviewer.decompilers.Decompiler;
|
||||||
import the.bytecode.club.bytecodeviewer.plugin.preinstalled.EZInjection;
|
import the.bytecode.club.bytecodeviewer.plugin.preinstalled.EZInjection;
|
||||||
|
@ -264,8 +265,8 @@ public class BytecodeViewer {
|
||||||
*
|
*
|
||||||
* @return The wrapped Krakatau Assembler instance
|
* @return The wrapped Krakatau Assembler instance
|
||||||
*/
|
*/
|
||||||
public static the.bytecode.club.bytecodeviewer.compilers.Compiler getKrakatauCompiler() {
|
public static InternalCompiler getKrakatauCompiler() {
|
||||||
return Compilers.krakatau;
|
return Compiler.KRAKATAU_ASSEMBLER.getCompiler();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -273,7 +274,7 @@ public class BytecodeViewer {
|
||||||
*
|
*
|
||||||
* @return The wrapped Smali Assembler instance
|
* @return The wrapped Smali Assembler instance
|
||||||
*/
|
*/
|
||||||
public static the.bytecode.club.bytecodeviewer.compilers.Compiler getSmaliCompiler() {
|
public static InternalCompiler getSmaliCompiler() {
|
||||||
return Compilers.smali;
|
return Compiler.SMALI_ASSEMBLER.getCompiler();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,13 +19,23 @@ package the.bytecode.club.bytecodeviewer.compilers;
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to represent all the compilers/assemblers BCV contains.
|
* A collection of all of the supported compilers/assemblers inside of BCV
|
||||||
*
|
*
|
||||||
* @author Konloch
|
* @author Konloch
|
||||||
*/
|
*/
|
||||||
|
public enum Compiler
|
||||||
public abstract class Compiler {
|
{
|
||||||
|
KRAKATAU_ASSEMBLER(new KrakatauAssembler()),
|
||||||
public abstract byte[] compile(String contents, String name);
|
SMALI_ASSEMBLER(new SmaliAssembler()),
|
||||||
|
JAVA_COMPILER(new JavaCompiler()),
|
||||||
|
;
|
||||||
|
|
||||||
|
private final InternalCompiler compiler;
|
||||||
|
|
||||||
|
Compiler(InternalCompiler compiler) {this.compiler = compiler;}
|
||||||
|
|
||||||
|
public InternalCompiler getCompiler()
|
||||||
|
{
|
||||||
|
return compiler;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
package the.bytecode.club.bytecodeviewer.compilers;
|
|
||||||
|
|
||||||
public class Compilers {
|
|
||||||
public static Compiler krakatau = new KrakatauAssembler();
|
|
||||||
public static Compiler smali = new SmaliAssembler();
|
|
||||||
public static Compiler java = new JavaCompiler();
|
|
||||||
}
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
package the.bytecode.club.bytecodeviewer.compilers;
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
|
||||||
|
* Copyright (C) 2014 Kalen 'Konloch' Kinloch - http://bytecodeviewer.com *
|
||||||
|
* *
|
||||||
|
* This program is free software: you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to represent a single the compiler/assembler
|
||||||
|
*
|
||||||
|
* @author Konloch
|
||||||
|
*/
|
||||||
|
|
||||||
|
public abstract class InternalCompiler
|
||||||
|
{
|
||||||
|
|
||||||
|
public abstract byte[] compile(String contents, String name);
|
||||||
|
|
||||||
|
}
|
|
@ -37,10 +37,12 @@ import static the.bytecode.club.bytecodeviewer.Constants.*;
|
||||||
* @author Konloch
|
* @author Konloch
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class JavaCompiler extends Compiler {
|
public class JavaCompiler extends InternalCompiler
|
||||||
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] compile(String contents, String name) {
|
public byte[] compile(String contents, String name)
|
||||||
|
{
|
||||||
String fileStart = tempDirectory + fs + "temp" + MiscUtils.randomString(12) + fs;
|
String fileStart = tempDirectory + fs + "temp" + MiscUtils.randomString(12) + fs;
|
||||||
String fileStart2 = tempDirectory + fs + "temp" + MiscUtils.randomString(12) + fs;
|
String fileStart2 = tempDirectory + fs + "temp" + MiscUtils.randomString(12) + fs;
|
||||||
File java = new File(fileStart + fs + name + ".java");
|
File java = new File(fileStart + fs + name + ".java");
|
||||||
|
|
|
@ -36,7 +36,8 @@ import static the.bytecode.club.bytecodeviewer.Constants.*;
|
||||||
*
|
*
|
||||||
* @author Konloch
|
* @author Konloch
|
||||||
*/
|
*/
|
||||||
public class KrakatauAssembler extends Compiler {
|
public class KrakatauAssembler extends InternalCompiler
|
||||||
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] compile(String contents, String name) {
|
public byte[] compile(String contents, String name) {
|
||||||
|
|
|
@ -35,7 +35,8 @@ import static the.bytecode.club.bytecodeviewer.Constants.*;
|
||||||
* @author Konloch
|
* @author Konloch
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class SmaliAssembler extends Compiler {
|
public class SmaliAssembler extends InternalCompiler
|
||||||
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] compile(String contents, String name) {
|
public byte[] compile(String contents, String name) {
|
||||||
|
|
|
@ -56,6 +56,7 @@ public class ImportResource implements Runnable
|
||||||
for (final File file : files)
|
for (final File file : files)
|
||||||
{
|
{
|
||||||
final String fn = file.getName();
|
final String fn = file.getName();
|
||||||
|
|
||||||
if (!file.exists())
|
if (!file.exists())
|
||||||
{
|
{
|
||||||
update = false;
|
update = false;
|
||||||
|
@ -96,9 +97,13 @@ public class ImportResource implements Runnable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (final Exception e) {
|
}
|
||||||
|
catch (final Exception e)
|
||||||
|
{
|
||||||
new ExceptionUI(e);
|
new ExceptionUI(e);
|
||||||
} finally {
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
BytecodeViewer.viewer.updateBusyStatus(false);
|
BytecodeViewer.viewer.updateBusyStatus(false);
|
||||||
|
|
||||||
if (update)
|
if (update)
|
||||||
|
|
Loading…
Reference in a new issue