Merge remote-tracking branch 'origin/Ghidra_12.0'

This commit is contained in:
Ryan Kurtz
2025-12-03 11:18:29 -05:00
10 changed files with 354 additions and 127 deletions
@@ -69,7 +69,7 @@ def open_project(
path: Union[str, Path],
name: str,
create: bool = False
) -> "Project": # type: ignore
) -> "Project":
"""
Opens the Ghidra project at the given location, optionally creating it if it doesn't exist.
@@ -126,7 +126,7 @@ def consume_program(
def program_context(
project: "Project",
path: Union[str, Path],
) -> "Program":
) -> Generator["Program", None, None]:
"""
Gets the Ghidra program from the given project with the given project path. The returned
program's resource cleanup is performed by a context manager.
@@ -180,7 +180,7 @@ def ghidra_script(
def transaction(
program: "Program",
description: str = "Unnamed Transaction"
):
) -> Generator[int, None, None]:
"""
Creates a context for running a Ghidra transaction.
@@ -339,7 +339,7 @@ def open_program(
loader: Union[str, JClass] = None,
program_name: str = None,
nested_project_location = True
) -> ContextManager["FlatProgramAPI"]: # type: ignore
) -> Generator["FlatProgramAPI", None, None]:
"""
Opens given binary path (or optional program name) in Ghidra and returns FlatProgramAPI object.
@@ -15,7 +15,7 @@
##
import sys
import contextlib
from typing import Union, TYPE_CHECKING, Tuple, List, Callable, Any, Optional
from typing import Union, TYPE_CHECKING, Tuple, List, Callable, Generator, Any, Optional
from pyghidra.converters import * # pylint: disable=wildcard-import, unused-wildcard-import
@@ -61,7 +61,7 @@ def open_project(
path: Union[str, Path],
name: str,
create: bool = False
) -> "Project": # type: ignore
) -> "Project":
"""
Opens the Ghidra project at the given location, optionally creating it if it doesn't exist.
@@ -142,7 +142,7 @@ def consume_program(
def program_context(
project: "Project",
path: Union[str, Path],
) -> "Program":
) -> Generator["Program", None, None]:
"""
Gets the Ghidra program from the given project with the given project path. The returned
program's resource cleanup is performed by a context manager.
@@ -256,7 +256,7 @@ def ghidra_script(
def transaction(
program: "Program",
description: str = "Unnamed Transaction"
):
) -> Generator[int, None, None]:
"""
Creates a context for running a Ghidra transaction.
@@ -15,7 +15,7 @@
##
import contextlib
import warnings
from typing import Union, TYPE_CHECKING, Tuple, ContextManager, List, Optional
from typing import Union, TYPE_CHECKING, Tuple, Generator, List, Optional
from pyghidra.converters import * # pylint: disable=wildcard-import, unused-wildcard-import
@@ -179,7 +179,7 @@ def open_program(
loader: Union[str, JClass] = None,
program_name: str = None,
nested_project_location = True
) -> ContextManager["FlatProgramAPI"]: # type: ignore
) -> Generator["FlatProgramAPI", None, None]:
"""
Opens given binary path (or optional program name) in Ghidra and returns FlatProgramAPI object.
@@ -22,6 +22,7 @@ import sys
import threading
import types
from code import InteractiveConsole
from typing import Generator
from ghidra.app.script import ScriptControls
from ghidra.framework import Application
@@ -276,7 +277,7 @@ class PyConsole(InteractiveConsole):
self.reset()
@contextlib.contextmanager
def redirect_writer(self):
def redirect_writer(self) -> Generator[None, None, None]:
self._writer = self._err
try:
yield
@@ -292,7 +293,7 @@ class PyConsole(InteractiveConsole):
super().showtraceback()
@contextlib.contextmanager
def _run_context(self):
def _run_context(self) -> Generator[None, None, None]:
self._script.start()
success = False
try:
@@ -29,7 +29,7 @@ import tempfile
import threading
from importlib.machinery import ModuleSpec
from pathlib import Path
from typing import List, NoReturn, Tuple, Union
from typing import Generator, List, NoReturn, Tuple, Union
import jpype
from jpype import imports, _jpype
@@ -43,7 +43,7 @@ logger = logging.getLogger(__name__)
@contextlib.contextmanager
def _silence_java_output(stdout=True, stderr=True):
def _silence_java_output(stdout=True, stderr=True) -> Generator[None, None, None]:
from java.io import OutputStream, PrintStream # type:ignore @UnresolvedImport
from java.lang import System # type:ignore @UnresolvedImport
out = System.out