mirror of
https://github.com/volatilityfoundation/volatility3.git
synced 2026-08-17 20:35:40 +02:00
Linux: module extension object: Refactor to replace custom property cache with functools.cached_property that's available from Python 3.8
This commit is contained in:
@@ -31,29 +31,24 @@ vollog = logging.getLogger(__name__)
|
||||
|
||||
class module(generic.GenericIntelProcess):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self._mod_mem_type = None # Initialize _mod_mem_type to None for memoization
|
||||
|
||||
@property
|
||||
@functools.cached_property
|
||||
def mod_mem_type(self):
|
||||
"""Return the mod_mem_type enum choices if available or an empty dict if not"""
|
||||
# mod_mem_type and module_memory were added in kernel 6.4 which replaces
|
||||
# module_layout for storing the information around core_layout etc.
|
||||
# see commit ac3b43283923440900b4f36ca5f9f0b1ca43b70e for more information
|
||||
symbol_table_name = self.get_symbol_table_name()
|
||||
mod_mem_type_symname = symbol_table_name + constants.BANG + "mod_mem_type"
|
||||
symbol_space = self._context.symbol_space
|
||||
try:
|
||||
mod_mem_type = symbol_space.get_enumeration(mod_mem_type_symname).choices
|
||||
except exceptions.SymbolError:
|
||||
mod_mem_type = {}
|
||||
vollog.debug(
|
||||
"Unable to find mod_mem_type enum. This message can be ignored for kernels < 6.4"
|
||||
)
|
||||
|
||||
if self._mod_mem_type is None:
|
||||
try:
|
||||
self._mod_mem_type = self._context.symbol_space.get_enumeration(
|
||||
self.get_symbol_table_name() + constants.BANG + "mod_mem_type"
|
||||
).choices
|
||||
except exceptions.SymbolError:
|
||||
vollog.debug(
|
||||
"Unable to find mod_mem_type enum. This message can be ignored for kernels < 6.4"
|
||||
)
|
||||
# set to empty dict to show that the enum was not found, and so shouldn't be searched for again
|
||||
self._mod_mem_type = {}
|
||||
return self._mod_mem_type
|
||||
return mod_mem_type
|
||||
|
||||
def get_module_base(self):
|
||||
if self.has_member("mem"): # kernels 6.4+
|
||||
|
||||
Reference in New Issue
Block a user