mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-07-30 07:18:37 -09:00
GP-5298: PyGhidra can now find modules that live in directories
specified by the Bundle Manager
This commit is contained in:
@@ -109,6 +109,17 @@ class _PyGhidraImportLoader:
|
||||
def exec_module(self, fullname):
|
||||
pass
|
||||
|
||||
class _GhidraBundleFinder(importlib.machinery.PathFinder):
|
||||
""" (internal) Used to find modules in Ghidra bundle locations """
|
||||
|
||||
def find_spec(self, fullname, path=None, target=None):
|
||||
from ghidra.app.script import GhidraScriptUtil
|
||||
GhidraScriptUtil.acquireBundleHostReference()
|
||||
for directory in GhidraScriptUtil.getEnabledScriptSourceDirectories():
|
||||
spec = super().find_spec(fullname, [directory.absolutePath], target)
|
||||
if spec is not None:
|
||||
return spec
|
||||
return None
|
||||
|
||||
@contextlib.contextmanager
|
||||
def _plugin_lock():
|
||||
@@ -394,8 +405,9 @@ class PyGhidraLauncher:
|
||||
**jpype_kwargs
|
||||
)
|
||||
|
||||
# Install hook into python importlib
|
||||
# Install hooks into python importlib
|
||||
sys.meta_path.append(_PyGhidraImportLoader())
|
||||
sys.meta_path.append(_GhidraBundleFinder())
|
||||
|
||||
imports.registerDomain("ghidra")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user