/tools

Ubuntu18.04 KGDB로 내가 만든 모듈 디버그

kgdb로 내가 만든 모듈을 디버깅하는 방법이다.


이글은 kgdb로 커널 디버깅 환경을 구성한것을 전재로 한다.

포스트 : https://namj.be/kgdb/2020-01-24-kgdb

스택오버플로우글을 참고했다.

편의상 kgdb에 대한 다른 포스트들과 마찬가지로 디버거를 돌리는 쪽을 Host, 디버깅을 할 커널을 Guest라고 부르겠다.


Guest

게스트에서 모듈을 컴파일하고 insmod module_name으로 커널에 삽입한다. 실행파일을 하나 만들어 실행시킨다.

(Guest)$ vim add-symbol.sh

# 아래 내용을 붙혀넣는다. (당연히 your_module_name을 바꿔주어야한다.)
MODULE_NAME=your_module_name
MODULE_FILE=$(modinfo $MODULE_NAME.ko| awk '/filename/{print $2}')
DIR="/sys/module/${MODULE_NAME}/sections/"
echo add-symbol-file $MODULE_FILE $(cat "$DIR/.text") -s .bss $(cat "$DIR/.bss") -s .data $(cat "$DIR/.data")

(Guest)$ chmod +x add-symbol.sh
(Guest)$ ./add-symbol.sh

add-symbol-file /lib/modules/.../your_module_name.ko 0xffffffffa0110000 -s .bss 0xffffffffa011b948 -s .data 0xffffffffa011b6a0

위에서 출력된 결과물을 복사한다.


Host

호스트에서는 gdb에 위에서 복사한 커맨드를 붙혀넣기 해주면 된다.

(Host)# gdb vmlinux

(gdb) add-symbol-file /lib/modules/.../your_module_name.ko 0xffffffffa0110000 -s .bss 0xffffffffa011b948 -s .data 0xffffffffa011b6a0

파일이 없다는 에러가 뜨면 해당위치에 .ko파일을 복사해서 갖다 놓으면 된다.

Jaeyoun

Jaeyoun

The maintainer

Read More