我用
加载linux内核模块后user@c4:$ insmod mmaptest.ko
我可以通过
验证它是否已加载user@c4:$ cat /proc/modules
mmaptest 12727 0 - Live 0x0000000000000000 (OF)
但是所有段都列出了0x00地址。
user@c4$:$ systool -vm mmaptest
Module = "mmaptest"
Attributes:
coresize = "12727"
initsize = "0"
initstate = "live"
refcnt = "0"
srcversion = "EABEF6F90BEAAD0D15B576A"
taint = "OF"
uevent = <store method only>
Parameters:
count = "0"
Sections:
.bss = "0x0000000000000000"
.data = "0x0000000000000000"
.exit.text = "0x0000000000000000"
.gnu.linkonce.this_module= "0x0000000000000000"
.init.text = "0x0000000000000000"
.note.gnu.build-id = "0x0000000000000000"
.rodata = "0x0000000000000000"
.rodata.str1.1 = "0x0000000000000000"
.rodata.str1.8 = "0x0000000000000000"
.smp_locks = "0x0000000000000000"
.strtab = "0x0000000000000000"
.symtab = "0x0000000000000000"
.text = "0x0000000000000000"
__mcount_loc = "0x0000000000000000"
__param = "0x0000000000000000"
因此,当我尝试从不正确的(?)地址加载模块文本段中的符号时,我得到:
(gdb) add-symbol-file /home/mmaptest/mmaptest.ko 0x00
add symbol table from file "/home/mmaptest/mmaptest.ko" at
.text_addr = 0x0
(y or n) y
Reading symbols from /home/mmaptest/mmaptest.ko...(**no debugging symbols found**)...done.
这是关于模块本身还是加载到内核代码中的情况?为什么所有地址都是0x000000000000?
答案 0 :(得分:9)
我的旗帜不正确。调试符号表是使用此makefile构建的:
obj-m += mmaptest.o
MY_CFLAGS += -g -DDEBUG
ccflags-y += ${MY_CFLAGS}
CC += ${MY_CFLAGS}
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
debug:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
EXTRA_CFLAGS="$(MY_CFLAGS)"
clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
现在可以通过以下方式验证:
peter@c4:$ readelf -S mmaptest.ko | grep debug
[24] .debug_info PROGBITS 0000000000000000 00000d40
[25] .rela.debug_info RELA 0000000000000000 00018260
[26] .debug_abbrev PROGBITS 0000000000000000 0000d577
[27] .debug_loc PROGBITS 0000000000000000 0000dd54
[28] .rela.debug_loc RELA 0000000000000000 00029510
[29] .debug_aranges PROGBITS 0000000000000000 0000e5d5
[30] .rela.debug_arang RELA 0000000000000000 0002a3e0
[31] .debug_ranges PROGBITS 0000000000000000 0000e645
[32] .rela.debug_range RELA 0000000000000000 0002a458
[33] .debug_line PROGBITS 0000000000000000 0000e815
[34] .rela.debug_line RELA 0000000000000000 0002a878
[35] .debug_str PROGBITS 0000000000000000 0000f4cd
[38] .debug_frame PROGBITS 0000000000000000 00016e80
[39] .rela.debug_frame RELA 0000000000000000 0002a8c0
add symbol table from file "/home/peter/projects/svn/linux_kernel/mmaptest/mmaptest.ko"
at .text_addr = 0x0
(y or n) y
Reading symbols from /home/peter/projects/svn/linux_kernel/mmaptest/mmaptest.ko...done.
(gdb)