Ghidrathon icon indicating copy to clipboard operation
Ghidrathon copied to clipboard

Add ghidra.app.script.GhidraScript println, printf, printerr methods to Python built-in scope

Open hoanghai27 opened this issue 11 months ago • 2 comments

I need to use the println function to log messages when running headless mode but I see that Ghidrathon is ignoring it. Why is that? Can you support it?

>>> println
Traceback (most recent call last):
  File "/home/user/.ghidra/.ghidra_11.0.1_PUBLIC/Extensions/Ghidrathon/data/python/jepeval.py", line 74, in jepeval
    more_input_needed = _jepeval(line)
                        ^^^^^^^^^^^^^^
  File "/home/user/.ghidra/.ghidra_11.0.1_PUBLIC/Extensions/Ghidrathon/data/python/jepeval.py", line 49, in _jepeval
    exec(compile(line, "<string>", "single"), globals(), globals())
  File "<string>", line 1, in <module>
NameError: name 'println' is not defined

https://github.com/mandiant/Ghidrathon/blob/91c0cab3ecdd01ec3327d577cc5e0b4e31a384ae/data/python/jepwrappers.py#L285C29-L285C34

hoanghai27 avatar Mar 25 '24 10:03 hoanghai27

Thanks for reaching out @hoanghai27 . This specific line of code prevents overwriting Python's print function but you're correct that we should, if possible, add ghidra.app.script.GhidraScript's print* methods (println, printf, printerr). I limited these methods initially because Ghidrathon has to wire the Python interpreter's stdout, stderr to the JVM's stdout, stderr and additional testing would be needed to ensure the additional methods function as expected after the wiring is configured.

In the mean time, are you able to use the print method for your needs here?

mike-hunhoff avatar Mar 25 '24 18:03 mike-hunhoff

Thanks for your feedback, I tried removing those two lines and found that both python's print function and Ghidra's println function work fine on both Ghidrathon console and scripts.

hoanghai27 avatar Mar 27 '24 02:03 hoanghai27