GP-6754: Jython is now an extension

This commit is contained in:
Ryan Kurtz
2026-04-24 06:06:24 -04:00
parent 4a9b40c453
commit f14617d2eb
49 changed files with 23 additions and 10 deletions
@@ -118,6 +118,11 @@ encoded form; thus, using the encoded form can also create bifurcation in the na
## Processors ## Processors
## Jython Extension
Jython support is now delivered as a Ghidra Extension, which means an extra step is required to
install it. If you require Jython, simply go to `File -> Install Extensions` in the Ghidra
Front End GUI and check "Jython". Restart Ghidra and Jython support will be enabled.
## Additional Bug Fixes and Enhancements ## Additional Bug Fixes and Enhancements
Numerous other new features, improvements, and bug fixes are fully listed in the Numerous other new features, improvements, and bug fixes are fully listed in the
[Change History](ChangeHistory.md) file. [Change History](ChangeHistory.md) file.
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
apply from: "$rootProject.projectDir/gradle/distributableGhidraModule.gradle" apply from: "$rootProject.projectDir/gradle/distributableGhidraExtension.gradle"
apply from: "$rootProject.projectDir/gradle/javaProject.gradle" apply from: "$rootProject.projectDir/gradle/javaProject.gradle"
apply from: "$rootProject.projectDir/gradle/helpProject.gradle" apply from: "$rootProject.projectDir/gradle/helpProject.gradle"
apply from: "$rootProject.projectDir/gradle/jacocoProject.gradle" apply from: "$rootProject.projectDir/gradle/jacocoProject.gradle"
@@ -21,7 +21,7 @@ apply from: "$rootProject.projectDir/gradle/javaTestProject.gradle"
apply from: "$rootProject.projectDir/gradle/javadoc.gradle" apply from: "$rootProject.projectDir/gradle/javadoc.gradle"
apply plugin: 'eclipse' apply plugin: 'eclipse'
eclipse.project.name = 'Features Jython' eclipse.project.name = 'Xtra Jython'
def JYTHON = "org.python:jython-standalone:2.7.4" def JYTHON = "org.python:jython-standalone:2.7.4"
@@ -4,5 +4,6 @@
Module.manifest||GHIDRA||||END| Module.manifest||GHIDRA||||END|
README.md||GHIDRA||||END| README.md||GHIDRA||||END|
data/jython.theme.properties||GHIDRA||||END| data/jython.theme.properties||GHIDRA||||END|
extension.properties||GHIDRA||||END|
src/main/help/help/TOC_Source.xml||GHIDRA||||END| src/main/help/help/TOC_Source.xml||GHIDRA||||END|
src/main/help/help/topics/Jython/interpreter.html||GHIDRA||||END| src/main/help/help/topics/Jython/interpreter.html||GHIDRA||||END|
@@ -0,0 +1,5 @@
name=Jython
description=The Jython 2.x GhidraScript engine and interpreter plugin
author=Ghidra Team
createdOn=pre-4/23/2026
version=@extversion@
@@ -26,7 +26,7 @@
script-specific code.</LI> script-specific code.</LI>
<LI>Of course if you choose Java, the Ghidra script must be written in Java. <LI>Of course if you choose Java, the Ghidra script must be written in Java.
An implementation for Python (based on Jython) is also provided.</LI> An implementation for Python (based on PyGhidra) is also provided.</LI>
</OL> </OL>
<P align="center"><IMG border="0" src="images/New_Script_Editor.png" ></P> <P align="center"><IMG border="0" src="images/New_Script_Editor.png" ></P>
@@ -161,8 +161,8 @@
uses the same script file extension. If left unspecified, the first Ghidra script runtime uses the same script file extension. If left unspecified, the first Ghidra script runtime
environment that matches the script's extension will be used.<BR> environment that matches the script's extension will be used.<BR>
<BR> <BR>
For example, specify <TT>"@runtime Jython"</TT> if the script is targetted for a Jython 2 For example, specify <TT>"@runtime Jython"</TT> if the script is targeted for a Jython 2
runtime environment rather than a Python 3 runtime environment. runtime environment rather than a CPython 3 (PyGhidra) runtime environment.
</P> </P>
</BLOCKQUOTE> </BLOCKQUOTE>
</BLOCKQUOTE> </BLOCKQUOTE>
@@ -35,7 +35,6 @@ import ghidra.app.plugin.core.osgi.BundleStatusComponentProvider;
import ghidra.app.plugin.core.script.*; import ghidra.app.plugin.core.script.*;
import ghidra.app.script.*; import ghidra.app.script.*;
import ghidra.app.services.ConsoleService; import ghidra.app.services.ConsoleService;
import ghidra.jython.JythonScriptProvider;
import ghidra.util.HelpLocation; import ghidra.util.HelpLocation;
import ghidra.util.datastruct.LRUSet; import ghidra.util.datastruct.LRUSet;
@@ -223,7 +222,7 @@ public class GhidraScriptMgrPluginScreenShots extends GhidraScreenShotGenerator
List<GhidraScriptProvider> items = new ArrayList<>(); List<GhidraScriptProvider> items = new ArrayList<>();
JavaScriptProvider javaScriptProvider = new JavaScriptProvider(); JavaScriptProvider javaScriptProvider = new JavaScriptProvider();
items.add(javaScriptProvider); items.add(javaScriptProvider);
items.add(new JythonScriptProvider()); //items.add(new JythonScriptProvider());
final PickProviderDialog pickDialog = new PickProviderDialog(items, javaScriptProvider); final PickProviderDialog pickDialog = new PickProviderDialog(items, javaScriptProvider);
runSwing(() -> tool.showDialog(pickDialog), false); runSwing(() -> tool.showDialog(pickDialog), false);
@@ -22,7 +22,8 @@ import java.util.HexFormat;
import java.util.List; import java.util.List;
import org.junit.Test; import org.junit.Test;
import org.python.google.common.primitives.Longs;
import com.google.common.primitives.Longs;
import ghidra.framework.store.LockException; import ghidra.framework.store.LockException;
import ghidra.program.model.address.*; import ghidra.program.model.address.*;
@@ -24,7 +24,8 @@ import java.util.*;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.junit.Test; import org.junit.Test;
import org.python.google.common.primitives.Longs;
import com.google.common.primitives.Longs;
import ghidra.framework.store.LockException; import ghidra.framework.store.LockException;
import ghidra.util.SourceFileUtils; import ghidra.util.SourceFileUtils;
@@ -22,7 +22,8 @@ import java.util.List;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.python.google.common.primitives.Longs;
import com.google.common.primitives.Longs;
import generic.test.AbstractGenericTest; import generic.test.AbstractGenericTest;
import ghidra.framework.store.LockException; import ghidra.framework.store.LockException;