Map a new memory range. Args: addr: memory range base address size: memory range size (in bytes) perms: requested permissions mask info: range label string ptr: pointer to use (if any) Raises: QlMemoryMappedErr
(self, addr: int, size: int, perms: int = UC_PROT_ALL, info: Optional[str] = None)
| 620 | self.change_mapinfo(aligned_address, aligned_address + aligned_size, new_perms=perms) |
| 621 | |
| 622 | def map(self, addr: int, size: int, perms: int = UC_PROT_ALL, info: Optional[str] = None): |
| 623 | """Map a new memory range. |
| 624 | |
| 625 | Args: |
| 626 | addr: memory range base address |
| 627 | size: memory range size (in bytes) |
| 628 | perms: requested permissions mask |
| 629 | info: range label string |
| 630 | ptr: pointer to use (if any) |
| 631 | |
| 632 | Raises: |
| 633 | QlMemoryMappedError: in case requested memory range is not fully available |
| 634 | """ |
| 635 | |
| 636 | assert perms & ~UC_PROT_ALL == 0, f'unexpected permissions mask {perms}' |
| 637 | |
| 638 | if not self.is_available(addr, size): |
| 639 | raise QlMemoryMappedError('Requested memory is unavailable') |
| 640 | |
| 641 | self.ql.uc.mem_map(addr, size, perms) |
| 642 | self.add_mapinfo(addr, addr + size, perms, info or '[mapped]', None) |
| 643 | |
| 644 | def map_mmio(self, addr: int, size: int, handler: QlMmioHandler, info: str = '[mmio]'): |
| 645 | # TODO: mmio memory overlap with ram? Is that possible? |