TARGETS = [ "0004:5b8c", "0004:5bbf", "0004:5ea7", "0004:6430", "0009:92ad", "0009:b1cd", "000a:493e", "000a:4a68", "000a:b9e5", "000a:ba66", "000d:9d5e", "000d:a3b7", ] BEFORE_COUNT = 6 AFTER_COUNT = 8 listing = program.getListing() address_factory = program.getAddressFactory() def as_address(text): segment_text, offset_text = text.split(":") return address_factory.getAddress(f"{segment_text}:{offset_text}") def collect_window(center): instructions = [] current = listing.getInstructionContaining(center) if current is None: current = listing.getInstructionAt(center) if current is None: current = listing.getInstructionBefore(center) if current is not None and current.getNext() is not None and current.getNext().getAddress() <= center: current = current.getNext() if current is None: return instructions cursor = current for _ in range(BEFORE_COUNT): cursor = cursor.getPrevious() if cursor is None: break if cursor is None: cursor = current while cursor.getPrevious() is not None and len(instructions) < BEFORE_COUNT: cursor = cursor.getPrevious() while cursor is not None: instructions.append(cursor) if cursor == current: break cursor = cursor.getNext() cursor = current.getNext() while cursor is not None and len(instructions) < BEFORE_COUNT + AFTER_COUNT + 1: instructions.append(cursor) cursor = cursor.getNext() return instructions for target_text in TARGETS: target = as_address(target_text) print(f"=== {target} ===") window = collect_window(target) if not window: print("\n") continue for insn in window: marker = "=>" if insn.getAddress() == target else " " print(f"{marker} {insn.getAddress()} {insn}") print("")