def aggregate_drcov_batch(self, drcov_list): """ Aggregate a given list of DrcovData into a single coverage mapping. See create_coverage_from_drcov_list(...) for more verbose comments. """ errors = [] # create a new coverage set to manually aggregate data into coverage = DatabaseCoverage(self._palette) for i, drcov_data in enumerate(drcov_list, 1): # keep the user informed about our progress while aggregating disassembler.replace_wait_box( "Aggregating batch data %u/%u" % (i, len(drcov_list)) ) # normalize coverage data to the open database try: addresses = self._normalize_drcov_data(drcov_data) except Exception as e: errors.append((self.ERROR_COVERAGE_ABSENT, drcov_data.filepath)) lmsg("Failed to normalize coverage %s" % drcov_data.filepath) lmsg("- %s" % e) continue # aggregate the addresses into the output coverage mapping coverage.add_addresses(addresses, False) # return the created coverage name return (coverage, errors)
def _aggregate_batch(self, loaded_files): """ Aggregate the given loaded_files data into a single coverage object. """ idaapi.replace_wait_box("Aggregating coverage batch...") # create a new coverage set to manually aggregate data into coverage = DatabaseCoverage({}, self.palette) # # loop through the coverage data we have loaded from disk, and begin # the normalization process to translate / filter / flatten it for # insertion into the director (as a list of instruction addresses) # for i, data in enumerate(loaded_files, 1): # keep the user informed about our progress while loading coverage idaapi.replace_wait_box( "Aggregating batch data %u/%u" % (i, len(loaded_files)) ) # normalize coverage data to the open database try: addresses = self._normalize_coverage(data, self.director.metadata) # normalization failed, print & log it except Exception as e: lmsg("Failed to map coverage %s" % data.filepath) lmsg("- %s" % e) logger.exception("Error details:") continue # aggregate the addresses into the output coverage object coverage.add_addresses(addresses, False) # return the created coverage name return coverage