'Replaces `length` bytes starting at `addr` with a symbolic variable named name. Adds a constraint equaling that
symbolic variable to the value previously at `addr`, and returns the variable.'

def make_symbolic(self, name, addr, length=None):

    l.debug('making    %s    bytes    symbolic', length)
    if isinstance(addr, str):
        (addr, length) = self.state.arch.registers[addr]
    elif (length is None):
        raise Exception('Unspecified    length!')
    r = self.load(addr, length)
    v = self.get_unconstrained_bytes(name, r.size())
    self.store(addr, v)
    self.state.add_constraints((r == v))
    l.debug('...    eq    constraints:    %s', (r == v))
    return v
