Skip to content

Commit 37024ac

Browse files
committed
Change align usages to round_up
1 parent 3d19e7f commit 37024ac

File tree

4 files changed

+13
-12
lines changed

4 files changed

+13
-12
lines changed

qiling/extensions/idaplugin/qilingida.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1269,7 +1269,7 @@ def ql_show_mem_view(self, addr=get_screen_ea(), size=0x10):
12691269
ok = ask_yn(1, "Memory [%X:%X] is not mapped!\nDo you want to map it?\n YES - Load Binary\n NO - Fill page with zeroes\n Cancel - Close dialog" % (mem_addr, mem_addr + mem_size))
12701270
if ok == 0:
12711271
self.qlemu.ql.mem.map(mem_addr, mem_size)
1272-
self.qlemu.ql.mem.write(self.qlemu.ql.mem.align(mem_addr), b"\x00"*mem_size)
1272+
self.qlemu.ql.mem.write(mem_addr, b"\x00"*mem_size)
12731273
elif ok == 1:
12741274
# TODO: map_binary
12751275
return

qiling/loader/pe.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ def load_dll(self, name: bytes, driver: bool = False) -> int:
9696
data = cached.data
9797

9898
image_base = cached.ba
99-
image_size = self.ql.mem.align(len(data), 0x1000)
99+
image_size = self.ql.mem.align_up(len(data))
100100

101101
# verify whether we can load the dll to the same address it was loaded when it was cached.
102102
# if not, the dll will have to be realoded in order to have its symbols relocated using the
@@ -126,7 +126,7 @@ def load_dll(self, name: bytes, driver: bool = False) -> int:
126126
data = bytearray(dll.get_memory_mapped_image())
127127

128128
image_base = dll.OPTIONAL_HEADER.ImageBase or self.dll_last_address
129-
image_size = self.ql.mem.align(len(data), 0x1000)
129+
image_size = self.ql.mem.align_up(len(data))
130130

131131
self.ql.log.debug(f'DLL preferred base address: {image_base:#x}')
132132

@@ -514,7 +514,7 @@ def load(self):
514514
if self.path and not self.ql.code:
515515
# for simplicity, no image base relocation
516516
self.pe_image_address = self.pe.OPTIONAL_HEADER.ImageBase
517-
self.pe_image_address_size = self.ql.mem.align(self.pe.OPTIONAL_HEADER.SizeOfImage, 0x1000)
517+
self.pe_image_address_size = self.ql.mem.align_up(self.pe.OPTIONAL_HEADER.SizeOfImage)
518518

519519
if self.pe_image_address + self.pe_image_address_size > self.ql.os.heap_base_address:
520520
# pe reloc
@@ -599,7 +599,7 @@ def load(self):
599599
self.ql.os.fcall.writeParams(((POINTER, self.ql.loader.driver_object_address), (POINTER, self.ql.loader.regitry_path_address)))
600600

601601
# mmap PE file into memory
602-
self.ql.mem.map(self.pe_image_address, self.align(self.pe_image_address_size, 0x1000), info="[PE]")
602+
self.ql.mem.map(self.pe_image_address, self.ql.mem.align_up(self.pe_image_address_size), info="[PE]")
603603
self.pe.parse_data_directories()
604604
data = bytearray(self.pe.get_memory_mapped_image())
605605
self.ql.mem.write(self.pe_image_address, bytes(data))

qiling/loader/pe_uefi.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,9 @@ def map_and_load(self, path: str, exec_now: bool=False):
9797

9898
# use image base only if it does not point to NULL
9999
image_base = pe.OPTIONAL_HEADER.ImageBase or self.next_image_base
100-
image_size = ql.mem.align(pe.OPTIONAL_HEADER.SizeOfImage, 0x1000)
100+
image_size = ql.mem.align_up(pe.OPTIONAL_HEADER.SizeOfImage)
101101

102-
assert (image_base % 0x1000) == 0, 'image base is expected to be page-aligned'
102+
assert (image_base % ql.mem.pagesize) == 0, 'image base is expected to be page-aligned'
103103

104104
if image_base != pe.OPTIONAL_HEADER.ImageBase:
105105
pe.relocate_image(image_base)

qiling/os/memory.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,7 @@ def find_free_space(self, size: int, minaddr: int = None, maxaddr: int = None, a
455455
gaps = zip(gaps_lbounds, gaps_ubounds)
456456

457457
for lbound, ubound in gaps:
458-
addr = self.align(lbound, align)
458+
addr = self.align_up(lbound, align)
459459
end = addr + size
460460

461461
# is aligned range within gap and satisfying min / max requirements?
@@ -481,18 +481,19 @@ def map_anywhere(self, size: int, minaddr: int = None, maxaddr: int = None, alig
481481
if align is None:
482482
align = self.pagesize
483483

484+
size = self.align_up(size)
484485
addr = self.find_free_space(size, minaddr, maxaddr, align)
485486

486-
self.map(addr, self.align(size), perms, info)
487+
self.map(addr, size, perms, info)
487488

488489
return addr
489490

490491
def protect(self, addr: int, size: int, perms):
491492
# mask off perms bits that are not supported by unicorn
492493
perms &= UC_PROT_ALL
493494

494-
aligned_address = addr & ~(self.pagesize - 1)
495-
aligned_size = self.align((addr & (self.pagesize - 1)) + size)
495+
aligned_address = self.align(addr)
496+
aligned_size = self.align_up(size)
496497

497498
self.ql.uc.mem_protect(aligned_address, aligned_size, perms)
498499
self.change_mapinfo(aligned_address, aligned_address + aligned_size, mem_p = perms)
@@ -614,7 +615,7 @@ def alloc(self, size: int) -> int:
614615
# is new chunk going to exceed currently allocated heap space?
615616
# in case it does, allocate additional heap space
616617
if self.current_use + size > self.current_alloc:
617-
real_size = self.ql.mem.align(size)
618+
real_size = self.ql.mem.align_up(size)
618619

619620
# if that additional allocation is going to exceed heap upper bound, fail
620621
if self.start_address + self.current_use + real_size > self.end_address:

0 commit comments

Comments
 (0)