Read an integer value from a memory address. Bytes read will be unpacked using emulated architecture properties. Args: addr: memory address to read size: pointer size (in bytes): either 1, 2, 4, 8, or 0 for arch native size signed: interpret value
(self, addr: int, size: int = 0, *, signed = False)
| 359 | return self.ql.uc.mem_read(addr, size) |
| 360 | |
| 361 | def read_ptr(self, addr: int, size: int = 0, *, signed = False) -> int: |
| 362 | """Read an integer value from a memory address. |
| 363 | Bytes read will be unpacked using emulated architecture properties. |
| 364 | |
| 365 | Args: |
| 366 | addr: memory address to read |
| 367 | size: pointer size (in bytes): either 1, 2, 4, 8, or 0 for arch native size |
| 368 | signed: interpret value as a signed integer (default: False) |
| 369 | |
| 370 | Returns: integer value stored at the specified memory address |
| 371 | """ |
| 372 | |
| 373 | if not size: |
| 374 | size = self.ql.arch.pointersize |
| 375 | |
| 376 | try: |
| 377 | _unpack = self._unpackers[(size, signed)] |
| 378 | except KeyError: |
| 379 | raise QlErrorStructConversion(f"Unsupported pointer size: {size}") |
| 380 | |
| 381 | return _unpack(self.read(addr, size)) |
| 382 | |
| 383 | def write(self, addr: int, data: bytes) -> None: |
| 384 | """Write bytes to a memory. |