def _commit_funcs_thread(self): """ Commit all the named functions from this idb to the server. This is an IDA read thread safe function. """ self._print('Commiting functions...') # Set up a connection to remote db: frame_endpoint = TCPFrameClient(self._remote) fdb = DBEndpoint(frame_endpoint,self._db_name) for func_addr in Functions(): logger.debug('Iterating over func_addr: {}'.format(func_addr)) if not self._is_func_commit_candidate(func_addr): continue func_name = GetFunctionName(func_addr) func_comment = strip_comment_fcatalog(get_func_comment(func_addr)) func_data = get_func_data(func_addr) # If we had problems reading the function data, we skip it. if func_data is None: self._print('!> Skipping {}'.format(func_name)) continue fdb.add_function(func_name,func_comment,func_data) self._print(func_name) # Close db: fdb.close() self._print('Done commiting functions.')
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.')