Пример #1
0
def bit2fasm(db_root, db, grid, bit_file, fasm_file, bitread, part):
    """ Convert bitstream to FASM file. """
    part_yaml = os.path.join(db_root, '{}.yaml'.format(part))
    with tempfile.NamedTemporaryFile() as f:
        bits_file = f.name
        subprocess.check_output(
            '{} --part_file {} -o {} -z -y {}'.format(
                bitread, part_yaml, bits_file, bit_file
            ),
            shell=True
        )

        disassembler = fasm_disassembler.FasmDisassembler(db)

        with open(bits_file) as f:
            bitdata = bitstream.load_bitdata(f)

    model = fasm.output.merge_and_sort(
        disassembler.find_features_in_bitstream(bitdata, verbose=True),
        zero_function=disassembler.is_zero_feature,
        sort_key=grid.tile_key,
    )

    with open(fasm_file, 'w') as f:
        print(
            fasm.fasm_tuple_to_string(model, canonical=False), end='', file=f
        )
Пример #2
0
def bits_to_fasm(db_root, bits_file, verbose, canonical):
    disassembler = fasm_disassembler.FasmDisassembler(db.Database(db_root))

    with open(bits_file) as f:
        bitdata = bitstream.load_bitdata(f)

    print(
        fasm.fasm_tuple_to_string(disassembler.find_features_in_bitstream(
            bitdata, verbose=verbose),
                                  canonical=canonical))
Пример #3
0
def bits_to_fasm(db_root, bits_file, verbose, canonical):
    db = Database(db_root)
    grid = db.grid()
    disassembler = fasm_disassembler.FasmDisassembler(db)

    with open(bits_file) as f:
        bitdata = bitstream.load_bitdata(f)

    model = fasm.output.merge_and_sort(
        disassembler.find_features_in_bitstream(bitdata, verbose=verbose),
        zero_function=disassembler.is_zero_feature,
        sort_key=grid.tile_key,
    )

    print(fasm.fasm_tuple_to_string(model, canonical=canonical), end='')
Пример #4
0
def bits_to_fasm(db_root, db_part, bits_file):
    db = Database(db_root, db_part)
    grid = db.grid()
    disassembler = fasm_disassembler.FasmDisassembler(db)

    with open(bits_file) as f:
        bitdata = bitstream.load_bitdata(f)

    features_map = []

    model = fasm.output.merge_and_sort(
        disassembler.find_features_in_bitstream(bitdata,
                                                fmap=features_map,
                                                verbose=True),
        zero_function=disassembler.is_zero_feature,
        sort_key=grid.tile_key,
    )

    features_map_dict = dict()

    for f in features_map:
        if len(f['bit']) == 0:
            continue

        for b in f['bit']:
            s = b.split('_')
            addr = int(s[1], 16)
            features_map_dict[addr] = dict()

    for f in features_map:
        if len(f['bit']) == 0:
            continue

        for b in f['bit']:
            s = b.split('_')
            addr = int(s[1], 16)
            word = int(s[2])
            bit = int(s[3])
            bitno = (word * 32) + bit
            features_map_dict[addr][bitno] = f

    return features_map_dict