code: def build(self, start, end, symbols=None):
          
          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
docs: Return the list of basic blocks.
  
          :int start: Start address of the disassembling process.
          :int end: End address of the disassembling process.