walk

Lcrash HOWTO
Prev | Chapter 4. Lcrash Command Reference | Next

# 4.31. walk

#### Usage

    walk
            [-l]
            struct field|offset addr [-f] [-n] [-h n|p]
            struct field|offset addr -s [-h n|p]
            struct field|offset addr -h n|p -t
            address offset size
            [-i iteration_threshold]
            [-w outfile]

#### Description

    Walk a linked list of kernel structures or memory blocks.

    OPTIONS:
     -l
           Show a list of special structures, which can be displayed in a
           predefined formatted manner.
           Currently there is support for a handful special structures.
     struct field|offset addr [-f] [-n] [-h n|p]
           Display  each entry of a linked list of special structures in
           a predefined formatted way.
           By default, the output consists of one line for each structure.
           Using '-f' and/or '-n' a more detailed output is given.
           '-f' can be used for all special structures. '-n' works for
           special structures "mm_struct" and "task_struct".
     struct field|offset addr -s [-h n|p]
           Each structure of a linked list is displayed in its entirety -
           in a C-like format. All structures for which type information is
           available can be displayed in this manner.
     -h n|p
           A linked list is constructed by following "list_head" structures
           instead of next pointers. The argument specifies wether to follow
           the next pointers of struct list_head (using 'n') or to follow
           the prev pointers of struct list_head (by using 'p').
           'field' or 'offset' is regarded as a member of type "list_head"
           instead of a next pointer within the 'struct'. 'addr' is
           interpreted as a pointer to an anchor of a linked list of
           "struct list_head" structures.
     struct field|offset addr -h n|p -t
           Display each entry of a linked "list_head"-list in one line.
           For each entry the address to the 'struct' structure, the
           address to the "list_head" member within 'struct', and previous
           and next pointer of the embedded "list_head" are given.
     address offset size
           Do a hex memory dump of each structure in a list.
           A start address ('address') of a structure, a byte offset
           ('offset') for the next pointer in the structure, and a
           structure size ('size') are required. 'size' bytes will be
           dumped for each entry in the constructed list.
     -i iteration_threshold
           By default, certain loops are interrupted after 10'000 iterations
           to avoid endless loops while following invalid pointers. Using
           this option you can change the threshold for the current command.
           A value '0' means infinite iteration threshold, i.e. no
           interruption of the loop is caused by reaching any threshold.

    While using "struct field|offset addr" without '-h', a structure name
    ('struct'), a field name ('field') or byte offset ('offset') for the next
    pointer within the structure, and a pointer ('addr') to the first entry
    of the linked list must be given.

    Note: Using '-h' the anchor is not displayed as a structure 'struct'.

Example 4-22. walk

    >> module
        ADDR      SIZE USED NAME                               REFS
    ===========================================================================
    d0103000     17928    1 ibmtr_cs                      []
    d00fe000      6608    2 ds                            [ibmtr_cs]
    d00f3000     23408    2 i82365                        []
    d00e6000     46848    0 pcmcia_core                   [ibmtr_cs
                                                           ds
                                                           i82365]
    c02ad0e0         0    1 kernel_module                 []
    ===========================================================================

    >> print ((module*) d00e6000)->refs
    0xd0106b80

    >> walk -s module_ref next_ref 0xd0106b80
    struct module_ref {
            dep = 0xd00e6000
            ref = 0xd0103000
            next_ref = 0xd00ff9bc
    }
    struct module_ref {
            dep = 0xd00e6000
            ref = 0xd00fe000
            next_ref = 0xd00f8b38
    }
    struct module_ref {
            dep = 0xd00e6000
            ref = 0xd00f3000
            next_ref = (nil)
    }

Example 4-23. walk

    >> findsym inode_unused
          ADDR  OFFSET  TYPE         NAME
    ============================================================
    0xc0243e48       0  LOCAL_DATA   inode_unused
    ============================================================
    1 symbol found

    >> walk list_head next 0xc0243e48 -h n -t
    STRUCT ADDR       PREV   LISTHEAD       NEXT
    ============================================
              0 0xc2faca48 0xc0243e48 0xc4d8d340
     0xc4d8d340 0xc0243e48 0xc4d8d340 0xc416ef68
     0xc416ef68 0xc4d8d340 0xc416ef68 0xc7ab55d0
     0xc7ab55d0 0xc416ef68 0xc7ab55d0 0xc3244298
     0xc3244298 0xc7ab55d0 0xc3244298 0xc328c3e0
     0xc328c3e0 0xc3244298 0xc328c3e0 0xc3baf0b0
       ...
     0xc32767b8 0xc3276cd8 0xc32767b8 0xc7ab50b0
     0xc7ab50b0 0xc32767b8 0xc7ab50b0 0xc79e7af0
     0xc79e7af0 0xc7ab50b0 0xc79e7af0 0xc3289af0
     0xc3289af0 0xc79e7af0 0xc3289af0 0xc32623e0
     0xc32623e0 0xc3289af0 0xc32623e0 0xc31f2150
     0xc31f2150 0xc32623e0 0xc31f2150 0xc314b0b0
     0xc314b0b0 0xc31f2150 0xc314b0b0 0xc2ff3c38
     0xc2ff3c38 0xc314b0b0 0xc2ff3c38 0xc2fd2528
     0xc2fd2528 0xc2ff3c38 0xc2fd2528 0xc2faca48
     0xc2faca48 0xc2fd2528 0xc2faca48 0xc0243e48
    ============================================

    >> walk inode i_list 0xc0243e48 -h n -t
    STRUCT ADDR       PREV   LISTHEAD       NEXT
    ============================================
              0 0xc2faca48 0xc0243e48 0xc4d8d340
     0xc4d8d338 0xc0243e48 0xc4d8d340 0xc416ef68
     0xc416ef60 0xc4d8d340 0xc416ef68 0xc7ab55d0
     0xc7ab55c8 0xc416ef68 0xc7ab55d0 0xc3244298
     0xc3244290 0xc7ab55d0 0xc3244298 0xc328c3e0
     0xc328c3d8 0xc3244298 0xc328c3e0 0xc3baf0b0
       ...
     0xc32767b0 0xc3276cd8 0xc32767b8 0xc7ab50b0
     0xc7ab50a8 0xc32767b8 0xc7ab50b0 0xc79e7af0
     0xc79e7ae8 0xc7ab50b0 0xc79e7af0 0xc3289af0
     0xc3289ae8 0xc79e7af0 0xc3289af0 0xc32623e0
     0xc32623d8 0xc3289af0 0xc32623e0 0xc31f2150
     0xc31f2148 0xc32623e0 0xc31f2150 0xc314b0b0
     0xc314b0a8 0xc31f2150 0xc314b0b0 0xc2ff3c38
     0xc2ff3c30 0xc314b0b0 0xc2ff3c38 0xc2fd2528
     0xc2fd2520 0xc2ff3c38 0xc2fd2528 0xc2faca48
     0xc2faca40 0xc2fd2528 0xc2faca48 0xc0243e48
    ============================================

    >> findsym inode_in_use
          ADDR  OFFSET  TYPE         NAME
    ============================================================
    0xc0243e40       0  GLOBAL_DATA  inode_in_use
    ============================================================
    1 symbol found

    >> walk inode i_list 0xc0243e40 -h n -t -i 5
    STRUCT ADDR       PREV   LISTHEAD       NEXT
    ============================================
              0 0xcff38008 0xc0243e40 0xc5501c38

    WARNING: Previous pointer broken. PREV: 0xc579c3e0, SHOULD BE: 0xc0243e40
     0xc5501c30 0xc579c3e0 0xc5501c38 0xc6314f68
     0xc6314f60 0xc5501c38 0xc6314f68 0xc2c44e20
     0xc2c44e18 0xc6314f68 0xc2c44e20 0xc8671340
     0xc8671338 0xc2c44e20 0xc8671340 0xc54da528
     0xc54da520 0xc8671340 0xc54da528 0xcbde6528

    WARNING: Iteration threshold reached. Current threshold: 5.
             Use "-i" to change threshold.

Example 4-24. walk

    >> module
          ADDR      SIZE USED NAME                          REFS
    ===========================================================================
    0xd00f6000     17928    1 ibmtr_cs                      []
    0xd00f1000      6608    2 ds                            [ibmtr_cs]
    0xd00e6000     23408    2 i82365                        []
       ...
    0xd002b000     27168    0 snd-ac97-codec                [snd-cs461x]
    0xd0023000     28624    0 snd-mixer                     [snd-ac97-codec]
    0xd0017000     43632    1 snd                           [snd-seq-midi
                                                             snd-seq-midi-event
                                                             snd-seq
                                                             snd-card-cs461x
                                                             snd-cs461x
                                                             snd-pcm
                                                             snd-timer
                                                             snd-rawmidi
                                                             snd-seq-device
                                                             snd-ac97-codec
                                                             snd-mixer]
    0xd0015000      2576    2 soundcore                     [snd]
    0xc0241980         0    1 kernel_module                 []
    ===========================================================================

    >> sizeof module
    Size of "module": 72 bytes

    >> offset module.next
    Offset: 4 bytes.

    >> walk 0xd002b000 4 72
    Dumping 72 byte block at 0xd002b000:

    0xd002b000: 00000060 d0023000 d00314c9 00006a20 : `....0...... j..
    0xd002b010: 00000000 00000011 0000000a 00000002 : ................
    0xd002b020: d00315a0 d0031a08 d0058134 d0030350 : ........4...P...
    0xd002b030: d003035c 00000000 00000000 00000000 : \...............
    0xd002b040: 00000000 00000000                   : ........

    Dumping 72 byte block at 0xd0023000:

    0xd0023000: 00000060 d0017000 d0029cc1 00006fd0 : `....p.......o..
    0xd0023010: 00000000 00000019 00000035 00000001 : ........5.......
    0xd0023020: d0029d78 d0029fc4 d0031a08 d00266b4 : x............f..
    0xd0023030: d00266c0 d00296e0 d00297e8 00000000 : .f..............
    0xd0023040: 00000000 00000000                   : ........

    Dumping 72 byte block at 0xd0017000:

    0xd0017000: 00000060 d0015000 d00200c1 0000aa70 : `....P......p...
    0xd0017010: 00000001 00000019 0000005f 00000001 : ........_.......
    0xd0017020: d0020170 d0021a60 d0080fd0 d0017ba4 : p...`........{..
    0xd0017030: d0017bb0 d001f8a4 d001f8fc 00000000 : .{..............
    0xd0017040: 00000000 00000000                   : ........

    Dumping 72 byte block at 0xd0015000:

    0xd0015000: 00000060 c0241980 d0015825 00000a10 : `.....$.%X......
    0xd0015010: 00000002 00000019 00000010 00000000 : ................
    0xd0015020: d00158f8 00000000 d0021a60 d001545c : .X......`...\T..
    0xd0015030: d0015440 00000000 00000000 00000000 : @T..............
    0xd0015040: 00000000 00000000                   : ........

    Dumping 72 byte block at 0xc0241980:

    0xc0241980: 00000048 00000000 c0205380 00000000 : H........S .....
    0xc0241990: 00000001 00000001 00000339 00000000 : ........9.......
    0xc02419a0: c0233958 00000000 00000000 00000000 : X9#.............
    0xc02419b0: 00000000 c0232aa0 c0233958 00000000 : .....*#.X9#.....
    0xc02419c0: 00000000 00000000                   : ........

    5 blocks in linked list

Prev | Home | Next
vtop | Up | whatis