'This is a backward lookup in the previous defs. Note that, as we are using VSA, it is possible that `variable`
is affected by several definitions.
:param LiveDefinitions live_defs: The collection of live definitions.
:param SimVariable: The variable to lookup for definitions.
:returns:           A dict {stmt:labels} where label is the number of individual addresses of `addr_list` (or
the actual set of addresses depending on the keep_addrs flag) that are definted by stmt.'

def _def_lookup(self, live_defs, variable):

    prevdefs = {}
    for code_loc in live_defs.lookup_defs(variable):
        if isinstance(variable, SimMemoryVariable):
            type_ = 'mem'
        elif isinstance(variable, SimRegisterVariable):
            type_ = 'reg'
        else:
            raise AngrDDGError(('Unknown    variable    type    %s' % type(variable)))
        prevdefs[code_loc] = {'type': type_, 'data': variable}
    return prevdefs
