def build(self, start, end, symbols=None):
        """Return the list of basic blocks.

        :int start: Start address of the disassembling process.
        :int end: End address of the disassembling process.

        """
        symbols = {} if not symbols else symbols

        # First pass: Recover BBs.
        bbs = self._recover_bbs(start, end, symbols)

        # Second pass: Split overlapping basic blocks introduced by back edges.
        bbs = self._split_bbs(bbs, symbols)

        # Third pass: Extract call targets for further analysis.
        call_targets = self._extract_call_targets(bbs)

        return bbs, call_targets
Return the list of basic blocks.

        :int start: Start address of the disassembling process.
        :int end: End address of the disassembling process.