Skip to content

Instantly share code, notes, and snippets.

@NicolasT
Last active August 29, 2015 14:10
Show Gist options
  • Save NicolasT/a6669e800cc53f8a13b1 to your computer and use it in GitHub Desktop.
Save NicolasT/a6669e800cc53f8a13b1 to your computer and use it in GitHub Desktop.
Utility script to load debug symbols for Linux kernel modules into GDB
#!/bin/bash -ue
MODULE=$1
SYMBOL_PATH_BASE=usr/lib/debug
SYS_MODULES_BASE=/sys/module
MODULES_BASE=/lib/modules/`uname -r`/
function go() {
MODULE_NAME=$1
SECTIONS_PATH=$SYS_MODULES_BASE/`echo $MODULE_NAME | sed s/-/_/g`/sections
TEXT=$(sudo cat $SECTIONS_PATH/.text)
echo -n "$TEXT "
for sect in `ls -A $SECTIONS_PATH | grep -v ^.text$`; do
echo -n "-s $sect `sudo cat $SECTIONS_PATH/$sect` "
done
echo
}
if `modprobe --show-depends $MODULE > /dev/null 2>&1`; then
echo "Known module, listing with dependencies:"
echo
modprobe --show-depends $MODULE | while read line; do
if `echo $line | grep ^insmod 2>&1 > /dev/null`; then
MODULE_PATH=$(echo $line | sed 's/^insmod //g')
MODULE_NAME=$(basename $MODULE_PATH .ko)
echo -n "add-symbol-file $SYMBOL_PATH_BASE$MODULE_PATH "
go $MODULE_NAME
fi
done
else
echo "Unknown module, listing without dependencies, prefix with 'add-symbol-file <file> ' accordingly:"
echo
go $MODULE
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment