|
2 | 2 | # |
3 | 3 | # Cross Platform and Multi Architecture Advanced Binary Emulation Framework |
4 | 4 | # |
5 | | -from collections import namedtuple |
6 | 5 |
|
7 | | -from qiling.const import QL_OS, QL_ARCH, QL_ENDIAN |
8 | | -from qiling.exception import QlErrorArch, QlErrorOsType, QlErrorOutput |
| 6 | +from typing import Any, Mapping, MutableSequence, NamedTuple |
9 | 7 |
|
| 8 | +from qiling import Qiling |
| 9 | + |
| 10 | +Image = NamedTuple('Image', (('base', int), ('end', int), ('path', str))) |
10 | 11 |
|
11 | 12 | class QlLoader(): |
12 | | - def __init__(self, ql): |
13 | | - self.ql = ql |
14 | | - self.env = self.ql.env |
15 | | - self.argv = self.ql.argv |
16 | | - self.images = [] |
17 | | - self.coverage_image = namedtuple('Image', 'base end path') |
| 13 | + def __init__(self, ql: Qiling): |
| 14 | + self.ql = ql |
| 15 | + self.env = self.ql.env |
| 16 | + self.argv = self.ql.argv |
| 17 | + self.images: MutableSequence[Image] = [] |
18 | 18 | self.skip_exit_check = False |
19 | | - |
20 | | - def save(self): |
21 | | - saved_state = {} |
22 | | - saved_state['images'] = list(map(tuple, self.images)) |
23 | | - return saved_state |
24 | 19 |
|
25 | | - def restore(self, saved_state): |
26 | | - for (base, end, path) in saved_state['images']: |
27 | | - self.images.append(self.coverage_image(base, end, path)) |
| 20 | + def save(self) -> Mapping[str, Any]: |
| 21 | + saved_state = { |
| 22 | + 'images': [tuple(img) for img in self.images] |
| 23 | + } |
| 24 | + |
| 25 | + return saved_state |
28 | 26 |
|
| 27 | + def restore(self, saved_state: Mapping[str, Any]): |
| 28 | + self.images = [Image(*img) for img in saved_state['images']] |
0 commit comments