From dcad9f327265b5334c13e570453e1183d10beef9 Mon Sep 17 00:00:00 2001
From: Ryan Kurtz
Date: Mon, 17 Jun 2019 14:23:36 -0400
Subject: [PATCH] New GhidraDev.
---
.../GhidraDevPlugin/GhidraDev_README.html | 90 ++++++++++--------
.../GhidraDevPlugin/icons/GhidraIcon16_bw.png | Bin 0 -> 1568 bytes
.../GhidraDev/GhidraDevPlugin/plugin.xml | 4 +-
.../GhidraProjectCreatorPreferencePage.java | 4 +-
.../CreateGhidraModuleProjectWizard.java | 20 ++++
.../CreateGhidraScriptProjectWizard.java | 21 ++++
.../GhidraDev/certification.manifest | 1 +
GhidraBuild/Skeleton/data/README.txt | 6 +-
8 files changed, 97 insertions(+), 49 deletions(-)
create mode 100644 GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/icons/GhidraIcon16_bw.png
diff --git a/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/GhidraDev_README.html b/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/GhidraDev_README.html
index 10cb20eafa..7f23320202 100644
--- a/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/GhidraDev_README.html
+++ b/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/GhidraDev_README.html
@@ -31,8 +31,6 @@ change with future releases.
Manual Installation in Eclipse
Automatic Installation through Ghidra
- Uninstalling
- Upgrading
GhidraDev Features
+ Upgrading
+ Uninstalling
Frequently Asked Questions
Additional Resources
Change History
-2.1.0: Added support for Ghidra 9.1. GhidraDev 2.1.0 will be unable to create
-new Eclipse projects for versions of Ghidra earlier than 9.1.
+2.1.0:
+
+ -
+ Added support for Ghidra 9.1. GhidraDev 2.1.0 will be unable to create new Eclipse projects for
+ versions of Ghidra earlier than 9.1.
+
+ -
+ Prevented Ghidra projects from being created inside of a Ghidra installation directory.
+
+
2.0.1: Fixed exception that occurred when performing certain actions on a Ghidra
project that was imported from a previously exported Archive File.
2.0.0:
@@ -96,7 +104,7 @@ that specify other projects on their build paths.
Minimum Requirements
- Eclipse 2018-12 4.10 or later
- - Ghidra 9.0 or later
+ - Ghidra 9.1 or later
(Back to Top)
@@ -138,39 +146,7 @@ Eclipse, it will attempt to install GhidraDev into Eclipse's dropins dire
is not already installed.
(Back to Top)
-Uninstalling
-GhidraDev is uninstalled differently depending on how it was installed. If GhidraDev was
-manually installed in Eclipse, it can be uninstalled as follows from
-Eclipse:
-
- - Click Help → About Eclipse
-
- - For macOS: Eclipse → About Eclipse
-
- - Click Installation Details
- - Select GhidraDev
- - Click Uninstall...
- - Select GhidraDev
- - Click Finish
- - Click Restart Now
-
-If GhidraDev was automatically installed through Ghidra, it can be
-uninstalled by simply removing the GhidraDev file from Eclipse's dropins directory and
-restarting Eclipse. The dropins directory can be found at the top level of Eclipse's
-installation directory.
-(Back to Top)
-
-Upgrading
-GhidraDev is upgraded differently depending on how it was installed. If GhidraDev was
-manually installed in Eclipse, it can be upgraded the same was it was
-installed.
-If GhidraDev was automatically installed through Ghidra, it can be
-upgraded by simply removing the GhidraDev file from Eclipse's dropins directory before
-following one of the two techniques described in the Installing GhidraDev
-section.
-(Back to Top)
-
-GhidraDev Features
+Features
GhidraDev provides a variety of features for creating and interacting with Ghidra-related
projects in Eclipse. GhidraDev supports creating both Ghidra script and Ghidra module projects.
Ghidra scripts are typically designed as a single Java source file that is compiled by Ghidra at
@@ -178,8 +154,6 @@ runtime and run through Ghidra's Script Manager or passed to the Headless Analyz
line for execution. Ghidra modules are intended to represent larger, more complex features such as
Analyzers or Plugins. When Ghidra modules are ready for production, they can be exported and
installed into Ghidra as an "extension".
-When GhidraDev is installed, a GhidraDev menu appears in Eclipse's
-title bar that provides direct access to these features:
- New
@@ -317,6 +291,38 @@ reason GhidraDev was unable to find a Jython interpreter in the Ghidra installat
to be added manually in the PyDev preferences.
(Back to Top)
+Upgrading
+GhidraDev is upgraded differently depending on how it was installed. If GhidraDev was
+manually installed in Eclipse, it can be upgraded the same was it was
+installed.
+If GhidraDev was automatically installed through Ghidra, it can be
+upgraded by simply removing the GhidraDev file from Eclipse's dropins directory before
+following one of the two techniques described in the Installing GhidraDev
+section.
+(Back to Top)
+
+Uninstalling
+GhidraDev is uninstalled differently depending on how it was installed. If GhidraDev was
+manually installed in Eclipse, it can be uninstalled as follows from
+Eclipse:
+
+ - Click Help → About Eclipse
+
+ - For macOS: Eclipse → About Eclipse
+
+ - Click Installation Details
+ - Select GhidraDev
+ - Click Uninstall...
+ - Select GhidraDev
+ - Click Finish
+ - Click Restart Now
+
+If GhidraDev was automatically installed through Ghidra, it can be
+uninstalled by simply removing the GhidraDev file from Eclipse's dropins directory and
+restarting Eclipse. The dropins directory can be found at the top level of Eclipse's
+installation directory.
+(Back to Top)
+
Frequently Asked Questions
-
@@ -338,7 +344,7 @@ to be added manually in the PyDev preferences.
@@ -363,7 +369,7 @@ to be added manually in the PyDev preferences.
please see:
-
- Ghidra Scripting slide deck:
+ Ghidra Scripting slide deck:
<GhidraInstallDir>/docs/GhidraClass/Intermediate/Scripting.html
diff --git a/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/icons/GhidraIcon16_bw.png b/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/icons/GhidraIcon16_bw.png
new file mode 100644
index 0000000000000000000000000000000000000000..4b0441835d38ef96a06b574f6542ccab32dae621
GIT binary patch
literal 1568
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z
z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a5n0T@z%2~Ij105p
zNH8!k&CU#oD2ed(u}aR*)k{ptPfFFR$SnY>W?-j
zfNYSkzLEl1NlCV?QiN}Sf^&XRs)DJWiJpOy9hZWFf=y9MnpKdC8&o@xXRDM^Qc_^0
zuU}qXu2*iXmtT~wZ)j<0sc&GUZ)BtkRH0j3nOBlnp_^B%3^4>|j!SBBa#3bMNoIbY
z0?6FNr2NtnTO}osMQ{LhXKn%9qP$|LuYms3uShJ=H`FuG$EGPI8Lp?Gv?vGcw3KB1
z)ST4Z)Vz{npgu#a`bsj>5Z*$u4I~4x4jdW~N7?{`)XKRiHL)bWC?r2W#|{({nR(g8
z$%zH2AWLoZ(N!RPXp@p`RgzhflZs>@&{%LdJLZ(2iozsvGC|>Qm6Mp4ZmU$Go06KA
zSejF!WasYT=@R4^@8%e0XlA1i3eucRR1+Ygs0Q2UV{wBG$g5WVMVY{mN(9A_ouQ3B
zh8WZz5L1z&6Kp9&6qs1-xPT!5OL%r%FRgC_(>K$5PZ!4!3qjvtUyo=OnVXrVs0d92Mw*dW_sP|(wJq)J^lI(m7j4^CX3_lEH8EaW
z|IC>)CtQ>i6WQ*xEWf#Z+qN?sHySDnaCq#$ub-WjC1&K=!ra(WKWpB+e?~?|NolF6
zg<-Z*yhqy=?OLWr>wk|8eJQn!m`hpmbLY0j$HlSi@=AKoyZwJ+Ny(IhYDuhiwzf-~
zo0(6YKfip@A|=)$zv^RYwM)S%9&nXUMJp`UH<#mwo$p#
zMs8E?><@ERHS>s0oILsPmYPMYS9j0v3=0qEe828T+u_8cdw1-JC_Om$&b@m
zdU`>TkuyzrniVWM4<9}pAHyq?tKt9q_wOq=Zg>a_3tzc>+1cOUe~ORV%KiK2x3#s2
zn0}b!W%6=z_jvjEJ}tO#^eC&TiOC1WoiTdX+)6LsySFY$Oz8KdZl!xq
z!y{(SpYMO=>Q&2w*Yk37RmCR9H_g48pPe0iC4##lC!lQJoH>8m;ngO
z+|1046%&G1PHF3#^6O4ke7yYBY16c3rKhLAOfYzHAfcA8)#?7uwbujZ&7L!7in+PD
z#vv)mXTN^!YW;ucka_>sMyE~Nw@+6u?`t$@eVQ3!&w8zY#^)bbu1q?3^SQr2R
literal 0
HcmV?d00001
diff --git a/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/plugin.xml b/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/plugin.xml
index 3de684ad9f..f4538462fa 100644
--- a/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/plugin.xml
+++ b/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/plugin.xml
@@ -351,7 +351,7 @@
@@ -415,7 +415,7 @@
diff --git a/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/preferences/GhidraProjectCreatorPreferencePage.java b/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/preferences/GhidraProjectCreatorPreferencePage.java
index d01131a3d6..b0cedb61da 100644
--- a/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/preferences/GhidraProjectCreatorPreferencePage.java
+++ b/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/preferences/GhidraProjectCreatorPreferencePage.java
@@ -76,9 +76,9 @@ implements IWorkbenchPreferencePage {
// Description label
Label descriptionLabel = new Label(container, SWT.NULL);
- descriptionLabel.setText("Add or remove Ghidra installations.\n" +
+ descriptionLabel.setText("Add or remove Ghidra installation directories.\n" +
"The checked Ghidra installation is the default used when creating new projects.\n" +
- "Red entries correspond to invalid Ghidra installations.");
+ "Red entries correspond to invalid Ghidra installation directories.");
new Label(container, SWT.NONE).setText(""); // filler
// Ghidra installations table
diff --git a/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/CreateGhidraModuleProjectWizard.java b/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/CreateGhidraModuleProjectWizard.java
index 807b25cd10..59837c7bca 100644
--- a/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/CreateGhidraModuleProjectWizard.java
+++ b/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/CreateGhidraModuleProjectWizard.java
@@ -77,6 +77,10 @@ public class CreateGhidraModuleProjectWizard extends Wizard implements INewWizar
@Override
public boolean performFinish() {
+ if (!validate()) {
+ return false;
+ }
+
File ghidraInstallDir = ghidraInstallationPage.getGhidraInstallDir();
String projectName = projectPage.getProjectName();
boolean createRunConfig = projectPage.shouldCreateRunConfig();
@@ -148,4 +152,20 @@ public class CreateGhidraModuleProjectWizard extends Wizard implements INewWizar
monitor.done();
}
}
+
+ /**
+ * Validates the wizard pages. If they are invalid, an error popup will be displayed which
+ * will indicate the problem.
+ *
+ * @return True if the data returned from the wizard pages are valid; otherwise, false
+ */
+ private boolean validate() {
+ if (projectPage.getProjectDir().getAbsolutePath().startsWith(
+ ghidraInstallationPage.getGhidraInstallDir().getAbsolutePath())) {
+ EclipseMessageUtils.showErrorDialog("Invalid Project Root Directory",
+ "Project root directory cannot reside inside of the selected Ghidra installation directory.");
+ return false;
+ }
+ return true;
+ }
}
diff --git a/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/CreateGhidraScriptProjectWizard.java b/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/CreateGhidraScriptProjectWizard.java
index 73000e510d..145e50c5b6 100644
--- a/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/CreateGhidraScriptProjectWizard.java
+++ b/GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/CreateGhidraScriptProjectWizard.java
@@ -30,6 +30,7 @@ import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;
import ghidra.GhidraApplicationLayout;
+import ghidradev.EclipseMessageUtils;
import ghidradev.ghidraprojectcreator.utils.GhidraScriptUtils;
import ghidradev.ghidraprojectcreator.wizards.pages.*;
@@ -68,6 +69,10 @@ public class CreateGhidraScriptProjectWizard extends Wizard implements INewWizar
@Override
public boolean performFinish() {
+ if (!validate()) {
+ return false;
+ }
+
File ghidraInstallDir = ghidraInstallationPage.getGhidraInstallDir();
String projectName = projectPage.getProjectName();
File projectDir = projectPage.getProjectDir();
@@ -134,4 +139,20 @@ public class CreateGhidraScriptProjectWizard extends Wizard implements INewWizar
monitor.done();
}
}
+
+ /**
+ * Validates the wizard pages. If they are invalid, an error popup will be displayed which
+ * will indicate the problem.
+ *
+ * @return True if the data returned from the wizard pages are valid; otherwise, false
+ */
+ private boolean validate() {
+ if (projectPage.getProjectDir().getAbsolutePath().startsWith(
+ ghidraInstallationPage.getGhidraInstallDir().getAbsolutePath())) {
+ EclipseMessageUtils.showErrorDialog("Invalid Project Root Directory",
+ "Project root directory cannot reside inside of the selected Ghidra installation directory.");
+ return false;
+ }
+ return true;
+ }
}
diff --git a/GhidraBuild/EclipsePlugins/GhidraDev/certification.manifest b/GhidraBuild/EclipsePlugins/GhidraDev/certification.manifest
index e277a1aba7..48ee7d8325 100644
--- a/GhidraBuild/EclipsePlugins/GhidraDev/certification.manifest
+++ b/GhidraBuild/EclipsePlugins/GhidraDev/certification.manifest
@@ -12,6 +12,7 @@ GhidraDevPlugin/build.gradle||GHIDRA||||END|
GhidraDevPlugin/build.properties||GHIDRA||||END|
GhidraDevPlugin/build_README.txt||GHIDRA||||END|
GhidraDevPlugin/icons/GhidraIcon16.png||GHIDRA||||END|
+GhidraDevPlugin/icons/GhidraIcon16_bw.png||GHIDRA||||END|
GhidraDevPlugin/icons/brick_add.png||FAMFAMFAM Icons - CC 2.5|||famfamfam silk icon set|END|
GhidraDevPlugin/icons/brick_go.png||FAMFAMFAM Icons - CC 2.5|||famfamfam silk icon set|END|
GhidraDevPlugin/icons/folder_link.png||FAMFAMFAM Icons - CC 2.5|||famfamfam silk icon set|END|
diff --git a/GhidraBuild/Skeleton/data/README.txt b/GhidraBuild/Skeleton/data/README.txt
index 03a9535c71..1222f673ea 100644
--- a/GhidraBuild/Skeleton/data/README.txt
+++ b/GhidraBuild/Skeleton/data/README.txt
@@ -10,6 +10,6 @@ The data/buildLanguage.xml is used for building the contents of the data/languag
The skel language definition has been commented-out within the skel.ldefs file so that the
skeleton language does not show-up within Ghidra.
-See the Sleigh language documentation (docs/languages/sleigh.htm or sleigh.pdf) for details
-on Sleigh language specification syntax.
-
+See the Sleigh language documentation (docs/languages/index.html) for details Sleigh language
+specification syntax.
+
\ No newline at end of file