code: def _recover_cfg(self, start=None, end=None, symbols=None, callback=None):
          
          # Retrieve symbol name in case it is available.
          if symbols and start in symbols:
              name = symbols[start][0]
              size = symbols[start][1] - 1 if symbols[start][1] != 0 else 0
          else:
              name = "sub_{:x}".format(start)
              size = 0
  
          # Compute start and end address.
          start_addr = start if start else self.binary.ea_start
          end_addr = end if end else self.binary.ea_end
  
          # Set callback.
          if callback:
              callback(start, name, size)
  
          # Recover basic blocks.
          bbs, calls = self.bb_builder.build(start_addr, end_addr, symbols)
  
          # Build CFG.
          cfg = ControlFlowGraph(bbs, name=name)
  
          return cfg, calls
docs: Recover CFG