簡體   English   中英

內核模塊中的符號

[英]symbols in kernel module

我構建了Linux內核模塊,支持mips架構的SSP。 我在編譯標志中添加了-fstack-protector-all 但是在加載這個模塊后,我得到了對__stack_chk_guard__stack_chk_fail的未定義引用。 但我將libssp.so添加到鏈接器。 看起來我應該在內核中導出這些符號,如下所示:

EXPORT_SYMBOL(__stack_chk_guard);

因為我的內核很舊而且還沒有包含它們。 但不幸的是我應該使用這個版本。

我的問題是:為什么用戶空間可以使用工具鏈庫中的這個符號,但內核空間不行?

我想,我錯過了一些Linux內核要領。

您無法將內核鏈接到共享庫。 如果你有一個libssp的靜態庫,它可以工作 - 但是它要求庫不會調用會導致內核出現問題的其他東西。

一般來說,堆棧檢查不是你應該在內核上做的事情 - 我很確定它沒有特別好的用途[我也很確定內核為每個內核堆棧使用“保護頁面” ]。

您不能在內核空間中的任何位置使用共享庫(包括作為內核模塊的一部分)。

您可以將內核模塊本身視為內核空間中的共享庫的等價物,但存在很多差異。

內核模塊可以依賴於來自其他內核模塊的exported symbols

我的問題是:為什么用戶空間可以使用工具鏈庫中的這個符號,但內核空間不行?

內核空間中沒有任何內容可以訪問libc C庫。 內核有自己的內置標准字符串操作函數等,您可以使用它們。 工具鏈庫建立在libc之上。

Mats的回答是+1。 您可以使用static library ,只要它不依賴於像libc這樣的標准C庫

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM