Skip to content

Commit 5616ad6

Browse files
committed
Opportunistic adjustments to mem.read_ptr
1 parent 9dda9c3 commit 5616ad6

File tree

3 files changed

+9
-8
lines changed

3 files changed

+9
-8
lines changed

qiling/os/memory.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,7 @@ def read(self, addr: int, size: int) -> bytearray:
288288

289289
def read_ptr(self, addr: int, size: int=None) -> int:
290290
"""Read an integer value from a memory address.
291+
Bytes read will be unpacked using emulated architecture properties.
291292
292293
Args:
293294
addr: memory address to read
@@ -306,10 +307,10 @@ def read_ptr(self, addr: int, size: int=None) -> int:
306307
8 : self.ql.unpack64
307308
}.get(size)
308309

309-
if __unpack:
310-
return __unpack(self.read(addr, size))
310+
if __unpack is None:
311+
raise QlErrorStructConversion(f"Unsupported pointer size: {size}")
311312

312-
raise QlErrorStructConversion(f"Unsupported pointer size: {size}")
313+
return __unpack(self.read(addr, size))
313314

314315
def write(self, addr: int, data: bytes) -> None:
315316
"""Write bytes to a memory.

qiling/os/qnx/syscall.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def ql_syscall_sys_cpupage_get(ql:Qiling, index, *args, **kw):
107107
return ql.os.cpupage_addr
108108
# CPUPAGE_PLS
109109
elif index == 1:
110-
return ql.unpack32(ql.mem.read(ql.os.cpupage_addr + 4, 4))
110+
return ql.mem.read_ptr(ql.os.cpupage_addr + 4, 4)
111111
# CPUPAGE_SYSPAGE
112112
elif index == 2:
113113
return ql.os.syspage_addr

qiling/os/uefi/utils.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def ptr_read8(ql: Qiling, addr: int) -> int:
6767
"""Read BYTE data from a pointer
6868
"""
6969

70-
return ql.unpack8(ql.mem.read(addr, 1))
70+
return ql.mem.read_ptr(addr, 1)
7171

7272
def ptr_write8(ql: Qiling, addr: int, val: int) -> None:
7373
"""Write BYTE data to a pointer
@@ -79,7 +79,7 @@ def ptr_read16(ql: Qiling, addr: int) -> int:
7979
"""Read WORD data from a pointer
8080
"""
8181

82-
return ql.unpack16(ql.mem.read(addr, 2))
82+
return ql.mem.read_ptr(addr, 2)
8383

8484
def ptr_write16(ql: Qiling, addr: int, val: int) -> None:
8585
"""Write WORD data to a pointer
@@ -91,7 +91,7 @@ def ptr_read32(ql: Qiling, addr: int) -> int:
9191
"""Read DWORD data from a pointer
9292
"""
9393

94-
return ql.unpack32(ql.mem.read(addr, 4))
94+
return ql.mem.read_ptr(addr, 4)
9595

9696
def ptr_write32(ql: Qiling, addr: int, val: int) -> None:
9797
"""Write DWORD data to a pointer
@@ -103,7 +103,7 @@ def ptr_read64(ql: Qiling, addr: int) -> int:
103103
"""Read QWORD data from a pointer
104104
"""
105105

106-
return ql.unpack64(ql.mem.read(addr, 8))
106+
return ql.mem.read_ptr(addr, 8)
107107

108108
def ptr_write64(ql: Qiling, addr: int, val: int) -> None:
109109
"""Write QWORD data to a pointer

0 commit comments

Comments
 (0)