Decompile.java 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import java.io.File;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import org.apache.logging.log4j.LogManager;
  6. import org.apache.logging.log4j.Logger;
  7. import ghidra.app.script.GhidraScript;
  8. import ghidra.app.util.Option;
  9. import ghidra.app.util.OptionException;
  10. import ghidra.app.util.exporter.CppExporter;
  11. import ghidra.app.util.exporter.ExporterException;
  12. public class Decompile extends GhidraScript {
  13. private static Logger log;
  14. public Decompile() {
  15. log = LogManager.getLogger(Decompile.class);
  16. }
  17. public void export(String filename) {
  18. File outputFile = new File(filename);
  19. CppExporter cppExporter = new CppExporter();
  20. cppExporter.setExporterServiceProvider(state.getTool());
  21. List<Option> options = new ArrayList<Option>();
  22. Option cppExportHeaderOption =
  23. new Option(CppExporter.CREATE_HEADER_FILE, Boolean.FALSE);
  24. options.add(cppExportHeaderOption);
  25. try {
  26. cppExporter.setOptions(options);
  27. } catch (OptionException e) {
  28. log.error("Unable to set cppExporter options", e);
  29. return;
  30. }
  31. try {
  32. cppExporter.export(outputFile, currentProgram, null, monitor);
  33. } catch (IOException e) {
  34. log.error("Failed writing decompiled code as output", e);
  35. } catch (ExporterException e) {
  36. log.error("Failed to export with cppExporter", e);
  37. }
  38. }
  39. @Override
  40. public void run() throws Exception {
  41. // IngredientDescription[] ingredients = getIngredientDescriptions();
  42. // for (IngredientDescription ingredient : ingredients) {
  43. // state.addParameter(ingredient.getID(), ingredient.getLabel(),
  44. // ingredient.getType(), ingredient.getDefaultValue());
  45. // }
  46. String[] args = getScriptArgs();
  47. export(args[0]);
  48. }
  49. }