arg = parse(machine.read_address(addr + 1 + i)) args.append(arg) if op == 'jmp': forks.append(int(args[1])) if op in ['jt', 'jf']: forks.append(int(args[2])) elif op == 'out' and args[1][0] != 'R': args.append(chr(int(args[1]))) memo[addr] = ' '.join(args) if op == 'ret': break addr += 1 + n_args else: addr += 1 for fork in forks: trace(machine, fork, memo) return memo if __name__ == '__main__': addr = int(sys.argv[1]) machine = VirtualMachine('input/challenge.bin') machine.load_state('teleporter') output = trace(machine, addr) for key in sorted(output.keys()): print "{}: {}".format(key, output[key])