2012-05-04 36 views
5

我正在編寫有關低級別內容的代碼。我需要知道內核符號地址來編寫可靠的代碼。所以即時通訊在Ubuntu kernel-3.0.19的用戶模式下嘗試讀取kallsyms。這就是用戶模式下的kallsyms輸出。在用戶模式下閱讀kallsyms

... 00000000 [R __ksymtab_prepare_kernel_cred 00000000 [R __kcrctab_prepare_kernel_cred 00000000 [R __kstrtab_prepare_kernel_cred ...

我怎麼能解決用戶模式這個問題。當im根和everyting的確定,但那不是我需要的。

謝謝。

回答

8

故意爲/proc/kallsyms顯示零而非非root用戶的實際地址。這稍微降低了安全風險。

詳細信息請見this upstream commit。另請參閱s_show() function in kallsyms.c中使用%pK打印說明符,s_show負責在/proc/kallsyms中提供記錄。

我懷疑仍然有可能以某種方式獲得符號地址而不是root用戶。沒有root權限的人不能訪問System.map。寫入/proc/sys/kernel/kptr_restrict時也是如此。

+0

'不能訪問沒有root權限的System.map。在我的RHEL服務器上,它被允許讀取這個文件/boot/System.map -... –

+0

我想,取決於發行版和/或內核版本。如果System.map包含內核函數的地址並且默認情況下對非root用戶可讀,這實際上使得kallsyms的保護無用。如果是RHEL 6,那麼內核很可能是2.6.32,IIRC,其中/ proc/kallsyms不受保護。如此可讀的System.map文件在這種情況下不會增加安全風險。 – Eugene

+0

如果您使用的是由發行版編譯的內核,您可以只看到適當的System.map的發行歸檔文件,不是? – domen