(self, function_starts, functions)
Voting for the most possible base address.

        :param function_starts:
        :param functions:
        :returns:
Voting for the most possible base address.
Voting for the most possible base address .
def _solve_forbase_address(self, function_starts, functions):
        """
        Voting for the most possible base address.

        :param function_starts:
        :param functions:
        :returns:
        """

        pseudo_base_addr = self.project.loader.main_object.min_addr

        base_addr_ctr = { }

        for s in function_starts:
            for f in functions:
                base_addr = s - f + pseudo_base_addr
                ctr = 1

                for k in function_starts:
                    if k - base_addr + pseudo_base_addr in functions:
                        ctr += 1

                if ctr > 5:
                    base_addr_ctr[base_addr] = ctr

        if len(base_addr_ctr):
            base_addr, hits = sorted([(k, v) for k, v in base_addr_ctr.items()], key=lambda x: x[1], reverse=True)[0]

            return base_addr
        else:
            return None
def _solve_forbase_address ( self , function_starts , functions ) : pseudo_base_addr = self . project . loader . main_object . min_addr base_addr_ctr = { } for s in function_starts : for f in functions : base_addr = s - f + pseudo_base_addr ctr = 1 for k in function_starts : if k - base_addr + pseudo_base_addr in functions : ctr += 1 if ctr > 5 : base_addr_ctr [ base_addr ] = ctr if len ( base_addr_ctr ) : base_addr , hits = sorted ( [ ( k , v ) for k , v in base_addr_ctr . items ( ) ] , key = lambda x : x [ 1 ] , reverse = True ) [ 0 ] return base_addr else : return None