Class JShellGhidraInterpreter

java.lang.Object
rubydragon.GhidraInterpreter
rubydragon.jshell.JShellGhidraInterpreter
All Implemented Interfaces:
ghidra.util.Disposable

public class JShellGhidraInterpreter extends GhidraInterpreter
A Java interpreter for Ghidra, based on JShell.
  • Field Details

  • Constructor Details

    • JShellGhidraInterpreter

      public JShellGhidraInterpreter(InputStream in, OutputStream out, OutputStream err, DragonPlugin parentPlugin)
      Creates a new interpreter, and ties the given streams to the new interpreter.
      Parameters:
      in - The input stream to use for the interpeter.
      out - The output stream to use for the interpreter.
      err - The error stream to use for the interpreter.
      parentPlugin - The DragonPlugin instance owning this interpreter.
    • JShellGhidraInterpreter

      public JShellGhidraInterpreter(ghidra.app.plugin.core.interpreter.InterpreterConsole console, DragonPlugin parentPlugin)
      Creates a new interpreter, and ties the streams for the provided console to the new interpreter.
      Parameters:
      console - The console to bind to the interpreter streams.
      parentPlugin - The DragonPlugin instance owning this interpreter.
  • Method Details

    • initInteractiveInterpreter

      public void initInteractiveInterpreter()
      Creates a new JShell interpreter, and declares the internal variables.
      Specified by:
      initInteractiveInterpreter in class GhidraInterpreter
      Since:
      3.1.0
    • dispose

      public void dispose()
      Should end the interpreter and release all resources.
      Specified by:
      dispose in interface ghidra.util.Disposable
      Specified by:
      dispose in class GhidraInterpreter
    • getCompletions

      public List<ghidra.app.plugin.core.console.CodeCompletion> getCompletions(String cmd)
      Get a list of completions for the given command prefix.
      Specified by:
      getCompletions in class GhidraInterpreter
      Parameters:
      cmd - The beginning of a command to try to complete.
      Returns:
      A list of possible code completions.
    • getParentPlugin

      public DragonPlugin getParentPlugin()
      The DragonPlugin that this interpreter is attached to.
      Specified by:
      getParentPlugin in class GhidraInterpreter
      Returns:
      The owning plugin of this interpreter.
      Since:
      3.1.0
    • getVersion

      public String getVersion()
      Get the version of Java this JShell supports.
      Specified by:
      getVersion in class GhidraInterpreter
      Returns:
      A string with the version of the interpreter.
      Since:
      3.1.0
    • importClass

      public void importClass(String packageName, String className)
      Imports a given class into the interpreter.
      Specified by:
      importClass in class GhidraInterpreter
      Parameters:
      packageName - The name of the package the class is in.
      className - The name of the class to import.
      Since:
      3.1.0
    • interrupt

      public void interrupt()
      Interrupts this interpreter.
    • reset

      public void reset()
      Resets this interpreter.
    • setErrWriter

      public void setErrWriter(PrintWriter errOut)
      Sets the error output stream for this interpreter.
      Specified by:
      setErrWriter in class GhidraInterpreter
      Parameters:
      errOut - The new error output stream to use for the interpreter.
    • setInput

      public void setInput(InputStream input)
      Sets the input stream for this interpreter.
      Specified by:
      setInput in class GhidraInterpreter
      Parameters:
      input - The new input stream to use for the interpreter.
    • setOutWriter

      public void setOutWriter(PrintWriter output)
      Sets the output stream for this interpreter.
      Specified by:
      setOutWriter in class GhidraInterpreter
      Parameters:
      output - The new output stream to use for the interpreter.
    • setVariable

      public void setVariable(String name, Object value)
      Adds or updates the variable with the given name to the given value in the interpreter.
      Specified by:
      setVariable in class GhidraInterpreter
      Parameters:
      name - The name of the variable to create or update.
      value - The value of the variable to add.
      Since:
      3.1.0
    • startInteractiveSession

      public void startInteractiveSession()
      Starts an interactive session with the current input/output/error streams.
      Specified by:
      startInteractiveSession in class GhidraInterpreter
    • updateAddress

      public void updateAddress(ghidra.program.model.address.Address address)
      Updates the current address pointed to by the "currentAddress" binding in the interpreter.
      Overrides:
      updateAddress in class GhidraInterpreter
      Parameters:
      address - The new current address in the program.
    • updateHighlight

      public void updateHighlight(ghidra.program.util.ProgramSelection sel)
      Updates the highlighted selection pointed to by the "currentHighlight" variable.
      Overrides:
      updateHighlight in class GhidraInterpreter
      Parameters:
      sel - The new highlighted selection.
    • updateLocation

      public void updateLocation(ghidra.program.util.ProgramLocation loc)
      Updates the location in the "currentLocation" variable as well as the address in the "ghidra/current-address" variable.
      Overrides:
      updateLocation in class GhidraInterpreter
      Parameters:
      loc - The new location in the program.
    • updateProgram

      public void updateProgram(ghidra.program.model.listing.Program program)
      Updates the program pointed to by the "currentProgram" binding.
      Overrides:
      updateProgram in class GhidraInterpreter
      Parameters:
      program - The new current program.
    • updateSelection

      public void updateSelection(ghidra.program.util.ProgramSelection sel)
      Updates the selection pointed to by the "currentSelection" binding.
      Overrides:
      updateSelection in class GhidraInterpreter
      Parameters:
      sel - The new selection.