Exemple #1
0
def bits_to_fasm(db_root, part, bits_file, verbose, canonical,
                 suppress_zero_features):
    db = Database(db_root, part)
    grid = db.grid()
    disassembler = fasm_disassembler.FasmDisassembler(db)

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

    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,
    )

    if suppress_zero_features:
        output_lines = []

        for line in model:
            if line.set_feature is None:
                output_lines.append(line)
            elif not disassembler.is_zero_feature(line.set_feature.feature):
                output_lines.append(line)

        print(fasm.fasm_tuple_to_string(output_lines, canonical=canonical),
              end='')
    else:
        print(fasm.fasm_tuple_to_string(model, canonical=canonical), end='')
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