def _find_similars_thread(self,similarity_cut,batch_size): """ For each unnamed function in this database find a similar functions from the fcatalog remote db, and rename appropriately. This thread is IDA write thread safe. """ self._print('Finding similars...') # Set up a connection to remote db: frame_endpoint = TCPFrameClient(self._remote) fdb = DBEndpoint(frame_endpoint,self._db_name) # Iterate over blocks of candidate functions addresses: for l_func_addr in blockify(self._iter_func_find_candidates(),\ batch_size): # Send block to remote server and get results: bsimilars = self._batch_similars(fdb,l_func_addr) # Iterate over functions and results: for func_addr,similars in bsimilars: if len(similars) == 0: # No similars found. continue # Get the first entry (Highest similarity): fsim = similars[0] # Discard if doesn't pass the similarity cut: if fsim.sim_grade < similarity_cut: continue old_name = GetFunctionName(func_addr) # Generate new name: new_name = make_fcatalog_name(fsim.name,fsim.sim_grade,func_addr) # If name matches old name, skip: if new_name == old_name: continue # Set function to have the new name: make_name(func_addr,new_name) # Add the comments from the fcatalog entry: func_comment = get_func_comment(func_addr) func_comment_new = \ add_comment_fcatalog(func_comment,fsim.comment) set_func_comment(func_addr,func_comment_new) self._print('{} --> {}'.format(old_name,new_name)) # Close db: fdb.close() self._print('Done finding similars.')
def clean_idb(): """ Clean all fcatalog marks and names from this idb. """ print('Cleaning idb...') for func_addr in Functions(): # Skip functions that are not fcatalog named: if not is_func_fcatalog(func_addr): continue print('{}'.format(GetFunctionName(func_addr))) # Clear function's name: make_name(func_addr,'') # Clean fcatalog comments from the function: func_comment = get_func_comment(func_addr) set_func_comment(func_addr,strip_comment_fcatalog(func_comment)) print('Done cleaning idb.')