# Linux Kernel Module Cheat

#### 3.4.1. GDB step debug kernel module insmodded by init on ARM

TODO on `arm` 51e31cdc2933a774c2a0dc62664ad8acec1d2dbe it does not always work, and `lx-symbols` fails with the message:

    loading vmlinux
    Traceback (most recent call last):
      File "/linux-kernel-module-cheat//out/arm/buildroot/build/linux-custom/scripts/gdb/linux/symbols.py", line 163, in invoke
        self.load_all_symbols()
      File "/linux-kernel-module-cheat//out/arm/buildroot/build/linux-custom/scripts/gdb/linux/symbols.py", line 150, in load_all_symbols
        [self.load_module_symbols(module) for module in module_list]
      File "/linux-kernel-module-cheat//out/arm/buildroot/build/linux-custom/scripts/gdb/linux/symbols.py", line 110, in load_module_symbols
        module_name = module['name'].string()
    gdb.MemoryError: Cannot access memory at address 0xbf0000cc
    Error occurred in Python command: Cannot access memory at address 0xbf0000cc

Can’t reproduce on `x86_64` and `aarch64` are fine.

It is kind of random: if you just `insmod` manually and then immediately `./run-gdb --arch arm`, then it usually works.

But this fails most of the time: shell 1:

    ./run --arch arm --eval-after 'insmod hello.ko'

shell 2:

    ./run-gdb --arch arm

then hit `Ctrl-C` on shell 2, and voila.

Then:

    cat /proc/modules

says that the load address is:

    0xbf000000

so it is close to the failing `0xbf0000cc`.

`readelf`:

    ./run-toolchain readelf -- -s "$(./getvar kernel_modules_build_subdir)/hello.ko"

does not give any interesting hits at `cc`, no symbol was placed that far.