Add type-annotations for reamining layer files.

This commit is contained in:
Mike Auty
2017-12-10 01:28:44 +00:00
parent c504ee5822
commit bde174d3d5
10 changed files with 184 additions and 111 deletions
+2 -1
View File
@@ -5,6 +5,7 @@ of symbols that can be used to interpret data in a layer. The context also prov
notably the object constructor function, `object`, which will construct a symbol on a layer at a particular offset.
"""
import copy
import typing
from abc import ABCMeta, abstractmethod
from volatility.framework import validity, interfaces
@@ -54,7 +55,7 @@ class ContextInterface(object, metaclass = ABCMeta):
@abstractmethod
def object(self,
symbol: str,
symbol: typing.Union[str, 'interfaces.objects.Template'],
layer_name: str,
offset: int,
**arguments):
+7 -6
View File
@@ -245,15 +245,15 @@ class DataLayerInterface(configuration.ConfigurableInterface, validity.ValidityR
def _scan_iterator(self,
scanner: 'ScannerInterface',
min_address: int,
max_address: int) -> range:
max_address: int) -> typing.Iterable[typing.Any]:
return range(min_address, max_address, scanner.chunk_size)
def _scan_chunk(self,
scanner: 'ScannerInterface',
min_address: int,
max_address: int,
progress: multiprocessing.Value,
iterator_value: int) -> typing.List[typing.Any]:
progress: ProgressValue,
iterator_value: typing.Any) -> typing.List[typing.Any]:
length = min(scanner.chunk_size + scanner.overlap, max_address - iterator_value)
chunk = self.read(iterator_value, length)
# Don't include the overlaps, or we'll go over 100%
@@ -286,7 +286,7 @@ class TranslationLayerInterface(DataLayerInterface, metaclass = ABCMeta):
def mapping(self,
offset: int,
length: int,
ignore_errors: bool = False) -> typing.List[typing.Tuple[int, int, int, str]]:
ignore_errors: bool = False) -> typing.Iterable[typing.Tuple[int, int, int, str]]:
"""Returns a sorted iterable of (offset, mapped_offset, length, layer) mappings
ignore_errors will provide all available maps with gaps, but their total length may not add up to the requested length
@@ -302,7 +302,8 @@ class TranslationLayerInterface(DataLayerInterface, metaclass = ABCMeta):
### Translation layer convenience function
def translate(self, offset: int, ignore_errors: bool = False) -> typing.Tuple[int, str]:
def translate(self, offset: int, ignore_errors: bool = False) \
-> typing.Tuple[typing.Optional[int], typing.Optional[str]]:
mapping = self.mapping(offset, 0, ignore_errors)
if mapping:
_, mapped_offset, _, layer = list(mapping)[0]
@@ -356,7 +357,7 @@ class TranslationLayerInterface(DataLayerInterface, metaclass = ABCMeta):
min_address: int,
max_address: int,
progress: ProgressValue,
iterator_value: int) -> typing.List[typing.Any]:
iterator_value: typing.Any) -> typing.List[typing.Any]:
size_to_scan = min(max_address - min_address, scanner.chunk_size + scanner.overlap)
result = [] # type: typing.List[typing.Any]
for map in self.mapping(iterator_value, size_to_scan, ignore_errors = True):