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