Skip to content

Commit d0ca8e4

Browse files
committed
Cleanup QlLoader
1 parent eb35ac9 commit d0ca8e4

File tree

4 files changed

+24
-24
lines changed

4 files changed

+24
-24
lines changed

qiling/loader/elf.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from qiling.const import *
1616

1717
from qiling.exception import *
18-
from .loader import QlLoader
18+
from .loader import QlLoader, Image
1919
from qiling.os.linux.function_hook import FunctionHook
2020
from qiling.os.linux.syscall_nums import SYSCALL_NR
2121
from qiling.os.linux.kernel_api.hook import *
@@ -422,7 +422,7 @@ def load_with_ld(self, stack_addr, load_address=-1, argv=[], env={}):
422422
self.ql.os.elf_entry = self.elf_entry = load_address + elfhead['e_entry']
423423
self.stack_address = new_stack
424424
self.load_address = load_address
425-
self.images.append(self.coverage_image(load_address, load_address + mem_end, self.path))
425+
self.images.append(Image(load_address, load_address + mem_end, self.path))
426426
self.ql.os.function_hook = FunctionHook(self.ql, self.elf_phdr + mem_start, self.elf_phnum, self.elf_phent,
427427
load_address, load_address + mem_end)
428428
self.init_sp = self.ql.reg.arch_sp

qiling/loader/loader.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,27 @@
22
#
33
# Cross Platform and Multi Architecture Advanced Binary Emulation Framework
44
#
5-
from collections import namedtuple
65

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
97

8+
from qiling import Qiling
9+
10+
Image = NamedTuple('Image', (('base', int), ('end', int), ('path', str)))
1011

1112
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] = []
1818
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
2419

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
2826

27+
def restore(self, saved_state: Mapping[str, Any]):
28+
self.images = [Image(*img) for img in saved_state['images']]

qiling/loader/pe.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from qiling.exception import *
1313
from qiling.const import *
1414
from qiling.arch.x86_const import *
15-
from .loader import QlLoader
15+
from .loader import QlLoader, Image
1616
from qiling.os.memory import QlMemoryHeap
1717

1818

@@ -141,7 +141,7 @@ def load_dll(self, dll_name, driver=False):
141141
self.add_ldr_data_table_entry(dll_name)
142142

143143
# add DLL to coverage images
144-
self.images.append(self.coverage_image(dll_base, dll_base+dll_len, path))
144+
self.images.append(Image(dll_base, dll_base+dll_len, path))
145145

146146
self.ql.log.info("Done with loading %s" % path)
147147

@@ -472,7 +472,7 @@ def load(self):
472472
self.sizeOfStackReserve = self.pe.OPTIONAL_HEADER.SizeOfStackReserve
473473
self.ql.log.info("Loading %s to 0x%x" % (self.path, self.pe_image_address))
474474
self.ql.log.info("PE entry point at 0x%x" % self.entry_point)
475-
self.images.append(self.coverage_image(self.pe_image_address, self.pe_image_address + self.pe.NT_HEADERS.OPTIONAL_HEADER.SizeOfImage, self.path))
475+
self.images.append(Image(self.pe_image_address, self.pe_image_address + self.pe.NT_HEADERS.OPTIONAL_HEADER.SizeOfImage, self.path))
476476

477477
# Stack should not init at the very bottom. Will cause errors with Dlls
478478
sp = self.stack_address + self.stack_size - 0x1000

qiling/loader/pe_uefi.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from qiling import Qiling
1010
from qiling.const import QL_ARCH
1111
from qiling.exception import QlErrorArch, QlMemoryMappedError
12-
from qiling.loader.loader import QlLoader
12+
from qiling.loader.loader import QlLoader, Image
1313

1414
from qiling.os.uefi import context, st, smst
1515
from qiling.os.uefi.ProcessorBind import CPU_STACK_ALIGNMENT
@@ -122,7 +122,7 @@ def map_and_load(self, path: str, exec_now: bool=False):
122122
self.install_loaded_image_protocol(image_base, image_size)
123123

124124
# this would be used later be os.find_containing_image
125-
self.images.append(self.coverage_image(image_base, image_base + image_size, path))
125+
self.images.append(Image(image_base, image_base + image_size, path))
126126

127127
# update next memory slot to allow sequencial loading. its availability
128128
# is unknown though

0 commit comments

Comments
 (0)