# Linux Kernel Module Cheat

#### 3.10.1. lx-ps

List all processes:

    lx-ps

Sample output:

    0xffff88000ed08000 1 init
    0xffff88000ed08ac0 2 kthreadd

The second and third fields are obviously PID and process name.

The first one is more interesting, and contains the address of the `task_struct` in memory.

This can be confirmed with:

    p ((struct task_struct)*0xffff88000ed08000

which contains the correct PID for all threads I’ve tried:

    pid = 1,

TODO get the PC of the kthreads: https://stackoverflow.com/questions/26030910/find-program-counter-of-process-in-kernel Then we would be able to see where the threads are stopped in the code!

On ARM, I tried:

    task_pt_regs((struct thread_info *)((struct task_struct)*0xffffffc00e8f8000))->uregs[ARM_pc]

but `task_pt_regs` is a `#define` and GDB cannot see defines without `-ggdb3`: https://stackoverflow.com/questions/2934006/how-do-i-print-a-defined-constant-in-gdb which are apparently not set?

Bibliography:

- https://stackoverflow.com/questions/9561546/thread-aware-gdb-for-kernel

- https://wiki.linaro.org/LandingTeams/ST/GDB

- https://events.static.linuxfound.org/sites/events/files/slides/Debugging%20the%20Linux%20Kernel%20with%20GDB.pdf presentation: https://www.youtube.com/watch?v=pqn5hIrz3A8

- CONFIG_PID_IN_CONTEXTIDR