mirror of
https://github.com/volatilityfoundation/volatility3.git
synced 2026-09-22 09:34:52 +02:00
run yapf on the newly added files
This commit is contained in:
@@ -29,7 +29,7 @@ class WindowsCrashDump32Layer(segmented.SegmentedLayer):
|
||||
VALIDDUMP = 0x504d5544
|
||||
|
||||
crashdump_json = 'crash'
|
||||
supported_dumptypes = [0x01, 0x05] # we need 0x5 for 32-bit bitmaps
|
||||
supported_dumptypes = [0x01, 0x05] # we need 0x5 for 32-bit bitmaps
|
||||
dump_header_name = '_DUMP_HEADER'
|
||||
|
||||
_magic_struct = struct.Struct('<II')
|
||||
@@ -49,10 +49,11 @@ class WindowsCrashDump32Layer(segmented.SegmentedLayer):
|
||||
self.crashdump_json)
|
||||
|
||||
# the _SUMMARY_DUMP is shared between 32- and 64-bit
|
||||
self._crash_common_table_name = intermed.IntermediateSymbolTable.create(context, self._config_path,
|
||||
self._crash_common_table_name = intermed.IntermediateSymbolTable.create(context,
|
||||
self._config_path,
|
||||
'windows',
|
||||
'crash_common',
|
||||
class_types=crash.class_types)
|
||||
class_types = crash.class_types)
|
||||
|
||||
# Check Header
|
||||
hdr_layer = self._context.layers[self._base_layer]
|
||||
@@ -77,13 +78,13 @@ class WindowsCrashDump32Layer(segmented.SegmentedLayer):
|
||||
|
||||
def get_header(self) -> interfaces.objects.ObjectInterface:
|
||||
return self.context.object(self._crash_table_name + constants.BANG + self.dump_header_name,
|
||||
offset=0,
|
||||
layer_name=self._base_layer)
|
||||
offset = 0,
|
||||
layer_name = self._base_layer)
|
||||
|
||||
def get_summary_header(self) -> interfaces.objects.ObjectInterface:
|
||||
return self.context.object(self._crash_common_table_name + constants.BANG + "_SUMMARY_DUMP",
|
||||
offset=0x1000 * self.headerpages,
|
||||
layer_name=self._base_layer)
|
||||
offset = 0x1000 * self.headerpages,
|
||||
layer_name = self._base_layer)
|
||||
|
||||
def _load_segments(self) -> None:
|
||||
"""Loads up the segments from the meta_layer."""
|
||||
@@ -92,13 +93,14 @@ class WindowsCrashDump32Layer(segmented.SegmentedLayer):
|
||||
|
||||
if self.dump_type == 0x1:
|
||||
header = self.context.object(self._crash_table_name + constants.BANG + self.dump_header_name,
|
||||
offset=0,
|
||||
layer_name=self._base_layer)
|
||||
offset = 0,
|
||||
layer_name = self._base_layer)
|
||||
|
||||
offset = self.headerpages
|
||||
header.PhysicalMemoryBlockBuffer.Run.count = header.PhysicalMemoryBlockBuffer.NumberOfRuns
|
||||
for run in header.PhysicalMemoryBlockBuffer.Run:
|
||||
segments.append((run.BasePage * 0x1000, offset * 0x1000, run.PageCount * 0x1000, run.PageCount * 0x1000))
|
||||
segments.append(
|
||||
(run.BasePage * 0x1000, offset * 0x1000, run.PageCount * 0x1000, run.PageCount * 0x1000))
|
||||
offset += run.PageCount
|
||||
|
||||
elif self.dump_type == 0x05:
|
||||
@@ -150,18 +152,17 @@ class WindowsCrashDump32Layer(segmented.SegmentedLayer):
|
||||
# report the segments for debugging. this is valuable for dev/troubleshooting but
|
||||
# not important enough for a dedicated plugin.
|
||||
for idx, (start_position, mapped_offset, length, _) in enumerate(segments):
|
||||
vollog.log(constants.LOGLEVEL_VVVV,
|
||||
"Segment {}: Position {:#x} Offset {:#x} Length {:#x}".format(idx,
|
||||
start_position,
|
||||
mapped_offset,
|
||||
length))
|
||||
vollog.log(
|
||||
constants.LOGLEVEL_VVVV,
|
||||
"Segment {}: Position {:#x} Offset {:#x} Length {:#x}".format(idx, start_position, mapped_offset,
|
||||
length))
|
||||
|
||||
self._segments = segments
|
||||
|
||||
@classmethod
|
||||
def check_header(cls, base_layer: interfaces.layers.DataLayerInterface, offset: int = 0) -> Tuple[int, int]:
|
||||
# Verify the Window's crash dump file magic
|
||||
|
||||
|
||||
try:
|
||||
header_data = base_layer.read(offset, cls._magic_struct.size)
|
||||
except exceptions.InvalidAddressException:
|
||||
@@ -209,4 +210,3 @@ class WindowsCrashDumpStacker(interfaces.automagic.StackerLayerInterface):
|
||||
except WindowsCrashDumpFormatException:
|
||||
pass
|
||||
return None
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ from volatility3.framework.layers import crash
|
||||
|
||||
vollog = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Crashinfo(interfaces.plugins.PluginInterface):
|
||||
_required_framework_version = (1, 0, 0)
|
||||
|
||||
@@ -20,12 +21,12 @@ class Crashinfo(interfaces.plugins.PluginInterface):
|
||||
return [
|
||||
requirements.TranslationLayerRequirement(name = 'primary',
|
||||
description = 'Memory layer for the kernel',
|
||||
architectures = ["Intel32", "Intel64"]),
|
||||
]
|
||||
|
||||
architectures = ["Intel32", "Intel64"]),
|
||||
]
|
||||
|
||||
def _generator(self, layer: crash.WindowsCrashDump32Layer):
|
||||
header = layer.get_header()
|
||||
uptime = datetime.timedelta(microseconds=int(header.SystemUpTime) / 10)
|
||||
uptime = datetime.timedelta(microseconds = int(header.SystemUpTime) / 10)
|
||||
|
||||
if header.DumpType == 0x1:
|
||||
dump_type = "Full Dump (0x1)"
|
||||
@@ -43,24 +44,25 @@ class Crashinfo(interfaces.plugins.PluginInterface):
|
||||
else:
|
||||
bitmap_header_size = bitmap_size = bitmap_pages = renderers.NotApplicableValue()
|
||||
|
||||
yield(0, (utility.array_to_string(header.Signature),
|
||||
header.MajorVersion,
|
||||
header.MinorVersion,
|
||||
format_hints.Hex(header.DirectoryTableBase),
|
||||
format_hints.Hex(header.PfnDataBase),
|
||||
format_hints.Hex(header.PsLoadedModuleList),
|
||||
format_hints.Hex(header.PsActiveProcessHead),
|
||||
header.MachineImageType,
|
||||
header.NumberProcessors,
|
||||
format_hints.Hex(header.KdDebuggerDataBlock),
|
||||
dump_type,
|
||||
str(uptime),
|
||||
utility.array_to_string(header.Comment),
|
||||
conversion.wintime_to_datetime(header.SystemTime),
|
||||
bitmap_header_size,
|
||||
bitmap_size,
|
||||
bitmap_pages,
|
||||
))
|
||||
yield (0, (
|
||||
utility.array_to_string(header.Signature),
|
||||
header.MajorVersion,
|
||||
header.MinorVersion,
|
||||
format_hints.Hex(header.DirectoryTableBase),
|
||||
format_hints.Hex(header.PfnDataBase),
|
||||
format_hints.Hex(header.PsLoadedModuleList),
|
||||
format_hints.Hex(header.PsActiveProcessHead),
|
||||
header.MachineImageType,
|
||||
header.NumberProcessors,
|
||||
format_hints.Hex(header.KdDebuggerDataBlock),
|
||||
dump_type,
|
||||
str(uptime),
|
||||
utility.array_to_string(header.Comment),
|
||||
conversion.wintime_to_datetime(header.SystemTime),
|
||||
bitmap_header_size,
|
||||
bitmap_size,
|
||||
bitmap_pages,
|
||||
))
|
||||
|
||||
def run(self):
|
||||
crash_layer = None
|
||||
@@ -74,21 +76,22 @@ class Crashinfo(interfaces.plugins.PluginInterface):
|
||||
vollog.error("This plugin requires a Windows crash dump")
|
||||
raise
|
||||
|
||||
return renderers.TreeGrid([("Signature", str),
|
||||
("MajorVersion", int),
|
||||
("MinorVersion", int),
|
||||
("DirectoryTableBase", format_hints.Hex),
|
||||
("PfnDataBase", format_hints.Hex),
|
||||
("PsLoadedModuleList", format_hints.Hex),
|
||||
("PsActiveProcessHead", format_hints.Hex),
|
||||
("MachineImageType", int),
|
||||
("NumberProcessors", int),
|
||||
("KdDebuggerDataBlock", format_hints.Hex),
|
||||
("DumpType", str),
|
||||
("SystemUpTime", str),
|
||||
("Comment", str),
|
||||
("SystemTime", datetime.datetime),
|
||||
("BitmapHeaderSize", format_hints.Hex),
|
||||
("BitmapSize", format_hints.Hex),
|
||||
("BitmapPages", format_hints.Hex),
|
||||
], self._generator(crash_layer))
|
||||
return renderers.TreeGrid([
|
||||
("Signature", str),
|
||||
("MajorVersion", int),
|
||||
("MinorVersion", int),
|
||||
("DirectoryTableBase", format_hints.Hex),
|
||||
("PfnDataBase", format_hints.Hex),
|
||||
("PsLoadedModuleList", format_hints.Hex),
|
||||
("PsActiveProcessHead", format_hints.Hex),
|
||||
("MachineImageType", int),
|
||||
("NumberProcessors", int),
|
||||
("KdDebuggerDataBlock", format_hints.Hex),
|
||||
("DumpType", str),
|
||||
("SystemUpTime", str),
|
||||
("Comment", str),
|
||||
("SystemTime", datetime.datetime),
|
||||
("BitmapHeaderSize", format_hints.Hex),
|
||||
("BitmapSize", format_hints.Hex),
|
||||
("BitmapPages", format_hints.Hex),
|
||||
], self._generator(crash_layer))
|
||||
|
||||
@@ -11,17 +11,17 @@ class SUMMARY_DUMP(objects.StructType):
|
||||
def get_buffer(self, sub_type: str, count: int) -> interfaces.objects.ObjectInterface:
|
||||
symbol_table_name = self.get_symbol_table_name()
|
||||
subtype = self._context.symbol_space.get_type(symbol_table_name + constants.BANG + sub_type)
|
||||
return self._context.object(object_type=symbol_table_name + constants.BANG + "array",
|
||||
layer_name=self.vol.layer_name,
|
||||
offset=self.BufferChar.vol.offset,
|
||||
count=count,
|
||||
subtype=subtype)
|
||||
return self._context.object(object_type = symbol_table_name + constants.BANG + "array",
|
||||
layer_name = self.vol.layer_name,
|
||||
offset = self.BufferChar.vol.offset,
|
||||
count = count,
|
||||
subtype = subtype)
|
||||
|
||||
def get_buffer_char(self) -> interfaces.objects.ObjectInterface:
|
||||
return self.get_buffer(sub_type="unsigned char", count=(self.BitmapSize + 7) // 8)
|
||||
return self.get_buffer(sub_type = "unsigned char", count = (self.BitmapSize + 7) // 8)
|
||||
|
||||
def get_buffer_long(self) -> interfaces.objects.ObjectInterface:
|
||||
return self.get_buffer(sub_type="unsigned long", count=(self.BitmapSize + 31) // 32)
|
||||
return self.get_buffer(sub_type = "unsigned long", count = (self.BitmapSize + 31) // 32)
|
||||
|
||||
|
||||
class_types = {'_SUMMARY_DUMP': SUMMARY_DUMP}
|
||||
|
||||
Reference in New Issue
Block a user