(value, limit=LIMIT, code=True, offset=0, hard_stop=None, hard_end=0, safe_linking=False)
return arrow_right.join(rest) + arrow_left + enhanced
Recursively dereferences an address into string representation, or convert the list representation
    of address dereferences into string representation.

    Arguments:
        value(int|list): Either the starting address to be sent to get, or the result of get (a list)
        limit(int): Number of valid pointers
        code(bool): Hint that indicates the value may be an instruction
        offset(int): Offset into the address to get the next pointer
        hard_stop(int): Value to stop on
        hard_end: Value to append when hard_stop is reached: null, value of hard stop, a string.
        safe_linking(bool): whether this chain use safe-linking

    Returns:
        A string representing pointers of each address and reference
        Strings format: 0x0804a10 —▸ 0x08061000 ◂— 0x41414141
Recursively dereferences an address into string representation, or convert the list representation
    of address dereferences into string representation.
Recursively dereferences an address into string representation or convert the list representation of address dereferences into string representation .
def format(value, limit=LIMIT, code=True, offset=0, hard_stop=None, hard_end=0, safe_linking=False):
    """
    Recursively dereferences an address into string representation, or convert the list representation
    of address dereferences into string representation.

    Arguments:
        value(int|list): Either the starting address to be sent to get, or the result of get (a list)
        limit(int): Number of valid pointers
        code(bool): Hint that indicates the value may be an instruction
        offset(int): Offset into the address to get the next pointer
        hard_stop(int): Value to stop on
        hard_end: Value to append when hard_stop is reached: null, value of hard stop, a string.
        safe_linking(bool): whether this chain use safe-linking

    Returns:
        A string representing pointers of each address and reference
        Strings format: 0x0804a10 —▸ 0x08061000 ◂— 0x41414141
    """
    limit = int(limit)

    # Allow results from get function to be passed to format
    if isinstance(value, list):
        chain = value
    else:
        chain = get(value, limit, offset, hard_stop, hard_end, safe_linking=safe_linking)

    arrow_left  = C.arrow(' %s ' % config_arrow_left)
    arrow_right = C.arrow(' %s ' % config_arrow_right)

    # Colorize the chain
    rest = []
    for link in chain:
        symbol = pwndbg.symbol.get(link) or None
        if symbol:
            symbol = '%#x (%s)' % (link, symbol)
        rest.append(M.get(link, symbol))

    # If the dereference limit is zero, skip any enhancements.
    if limit == 0:
        return rest[0]
    # Otherwise replace last element with the enhanced information.
    rest = rest[:-1]

    # Enhance the last entry
    # If there are no pointers (e.g. eax = 0x41414141), then enhance
    # the only element there is.
    if len(chain) == 1:
        enhanced = pwndbg.enhance.enhance(chain[-1], code=code)

    # Otherwise, the last element in the chain is the non-pointer value.
    # We want to enhance the last pointer value. If an offset was used
    # chain failed at that offset, so display that offset.
    elif len(chain) < limit + 1:
        enhanced = pwndbg.enhance.enhance(chain[-2] + offset, code=code, safe_linking=safe_linking)

    else:
        enhanced = C.contiguous('%s' % config_contiguous)

    if len(chain) == 1:
        return enhanced

    return arrow_right.join(rest) + arrow_left + enhanced
def format ( value , limit = LIMIT , code = True , offset = 0 , hard_stop = None , hard_end = 0 , safe_linking = False ) : limit = int ( limit ) # Allow results from get function to be passed to format if isinstance ( value , list ) : chain = value else : chain = get ( value , limit , offset , hard_stop , hard_end , safe_linking = safe_linking ) arrow_left = C . arrow ( ' %s ' % config_arrow_left ) arrow_right = C . arrow ( ' %s ' % config_arrow_right ) # Colorize the chain rest = [ ] for link in chain : symbol = pwndbg . symbol . get ( link ) or None if symbol : symbol = '%#x (%s)' % ( link , symbol ) rest . append ( M . get ( link , symbol ) ) # If the dereference limit is zero, skip any enhancements. if limit == 0 : return rest [ 0 ] # Otherwise replace last element with the enhanced information. rest = rest [ : - 1 ] # Enhance the last entry # If there are no pointers (e.g. eax = 0x41414141), then enhance # the only element there is. if len ( chain ) == 1 : enhanced = pwndbg . enhance . enhance ( chain [ - 1 ] , code = code ) # Otherwise, the last element in the chain is the non-pointer value. # We want to enhance the last pointer value. If an offset was used # chain failed at that offset, so display that offset. elif len ( chain ) < limit + 1 : enhanced = pwndbg . enhance . enhance ( chain [ - 2 ] + offset , code = code , safe_linking = safe_linking ) else : enhanced = C . contiguous ( '%s' % config_contiguous ) if len ( chain ) == 1 : return enhanced return arrow_right . join ( rest ) + arrow_left + enhanced