Ejemplo n.º 1
0
                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])