2015-12-29 89 views
0

我一直在試圖學習Linux內核調試,並創建了一些帶有一些導出符號的示例模塊。Linux內核調試警告:沒有符號表加載

int rday_3 = 30; EXPORT_SYMBOL(rday_3);

做insmod的之後,我能看到我的初始化模塊的dmesg和命令給我裝的象徵。但是,當我運行命令gdb /boot/vmlinuz-3.5.0-23-generic /proc/kcore,它給出了一個警告從/boot/vmlinuz-3.5.0-23-generic...(no調試符號發現

閱讀符號)......完成。

警告:核心文件可能與指定的可執行文件不匹配。 [新進程1] 核心是由`BOOT_IMAGE =/boot/vmlinuz-3.5.0-23-generic root = UUID = FE4E68E74E689A63 loop =/ubunt'生成的。

0 0x00000000 in ?? ()

(gdb)whatis rday_3

未加載符號表。使用「文件」命令。

然後我在調試模式下在我的Makefile生成的.ko文件中添加了調試標誌。我添加了命令add-symbol-file hello_driver.ko 0x00。在我得到的結果如

(GDB)頭朝下rday_3

類型= INT

(GDB)p rday_3

在地址0x0無法訪問存儲器

燦任何人都可以幫我解決最新的錯誤,還有什麼我需要補充?

回答

2

您必須給出模塊部分的正確地址。

$ cat /sys/module/YOURMODULE/sections/.text 
0xYOURMODULEADDRESS 

並加載符號:

(gdb) add-symbol-file hello_driver.ko 0xYOURMODULEADDRESS 

你可能需要增加更多的部分地址取決於可變奠定了其部分。請參閱gdb中的help add-symbol-file