Fixing Ghidra not finding extension modules installed outside of

installation dir.
This commit is contained in:
Ryan Kurtz 2020-06-15 13:34:50 -04:00 committed by adamopolous
parent d70c6c256f
commit 372c0b299c

View file

@ -52,8 +52,6 @@ public class GhidraApplicationLayout extends ApplicationLayout {
// Application installation directory
applicationInstallationDir = findGhidraApplicationInstallationDir();
// Modules
modules = findGhidraModules();
// User directories
userTempDir = ApplicationUtilities.getDefaultUserTempDir(getApplicationProperties());
@ -67,6 +65,9 @@ public class GhidraApplicationLayout extends ApplicationLayout {
// Patch directory
patchDir = findPatchDirectory();
// Modules
modules = findGhidraModules();
}
/**
@ -146,6 +147,26 @@ public class GhidraApplicationLayout extends ApplicationLayout {
Collection<ResourceFile> moduleRootDirectories =
ModuleUtilities.findModuleRootDirectories(applicationRootDirs, new ArrayList<>());
// Find installed extension modules
for (ResourceFile extensionInstallDir : extensionInstallationDirs) {
File[] extensionModuleDirs =
extensionInstallDir.getFile(false).listFiles(d -> d.isDirectory());
if (extensionModuleDirs != null) {
for (File extensionModuleDir : extensionModuleDirs) {
// Skip extensions that live in an application root directory...we've already
// found those.
if (applicationRootDirs.stream()
.anyMatch(dir -> FileUtilities.isPathContainedWithin(dir.getFile(false),
extensionModuleDir))) {
continue;
}
moduleRootDirectories.add(new ResourceFile(extensionModuleDir));
}
}
}
// Examine the classpath to look for modules outside of the application root directories.
// These might exist if Ghidra was launched from an Eclipse project that resides
// external to the Ghidra installation.