Make the decompiler plugin invoke the transpiler

This commit is contained in:
Dhruv Maroo
2023-04-22 07:04:44 +05:30
parent 8f916a6a8d
commit 59fef18c3a
9 changed files with 1511 additions and 1454 deletions

View File

@@ -22,9 +22,12 @@ import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import docking.ComponentProvider;
import ghidra.util.Msg;
import ghidra.util.task.ConsoleTaskMonitor;
import resources.ResourceManager;
import ghidrust.decompiler.parser.c.gen.CParser;
public class RustDecProvider extends ComponentProvider {
private JPanel panel;
private JTextArea code_area;
@@ -34,6 +37,7 @@ public class RustDecProvider extends ComponentProvider {
private Address addr;
private DecompInterface decomp_ifc = null;
private CParser transpiler = null;
private static final String EMPTY_LABEL = "<none>";
@@ -125,11 +129,20 @@ public class RustDecProvider extends ComponentProvider {
}
DecompileResults results = decomp_ifc.decompileFunction(func, 0, new ConsoleTaskMonitor());
if (results == null || results.getDecompiledFunction() == null) {
if (results == null || results.getDecompiledFunction() == null || results.getDecompiledFunction().getC() == null) {
code_area.setText("[!] Failed to decompile " + func.getName() + "\n");
return;
}
code_area.setText(results.getDecompiledFunction().getC());
String decompiled = results.getDecompiledFunction().getC();
String rust_code = "";
try {
rust_code = CParser.transpile(decompiled);
} catch (Exception e) {
rust_code = "/* [!] Failed to transpile " + func.getName() + " */\n" + decompiled;
}
code_area.setText(rust_code);
}
}