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 )
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))
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='')
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