def locations(start=None, end=None, reverse=False, selection=False): """Iterate locations in range. Args: start: Starting address, start of IDB if `None`. end: End address, end of IDB if `None`. reverse: Set to true to iterate in reverse order. selection: If set to True, replaces start and end with current selection. Returns: iterator of `Location` objects. """ if selection: start, end = get_selection() else: start, end = fix_addresses(start, end) if not reverse: item = idaapi.get_item_head(start) while item < end: yield Location(item) item += idaapi.get_item_size(item) else: # if reverse: item = idaapi.get_item_head(end - 1) while item > start: yield Location(item) item = idaapi.get_item_head(item - 1)
def get_patched_bytes(start=None, end=None): start, end = fix_addresses(start, end) patched_bytes = dict() def collector(ea, fpos, original, patched): patched_bytes[ea] = PatchedByte(ea, fpos, original, patched) return 0 idaapi.visit_patched_bytes(start, end, collector) return patched_bytes
def functions(start=None, end=None): """Get all functions in range. Args: start: Start address of the range. Defaults to IDB start. end: End address of the range. Defaults to IDB end. Returns: This is a generator that iterates over all the functions in the IDB. """ start, end = fix_addresses(start, end) for func_t in idautils.Functions(start, end): yield Function(func_t)
def Qwords(start=None, end=None): start, end = fix_addresses(start, end) return itertools.imap(idc.Qword, range(start, end, 4))
def Bytes(start=None, end=None): start, end = fix_addresses(start, end) return itertools.imap(idc.Byte, range(start, end))