2013-03-01 2 views
0

Я построил модуль ядра Linux с поддержкой SSP для архитектуры mips. Я добавил -fstack-protector-all для компиляции флагов. Но после загрузки этого модуля у меня есть неопределенные ссылки на __stack_chk_guard и __stack_chk_fail. Но я добавил libssp.so в компоновщик. Похоже, я должен экспортировать эти символы в ядре что-то вроде этого:символов в модуле ядра

EXPORT_SYMBOL(__stack_chk_guard); 

Потому что мое ядро ​​старо и не содержит их еще. Но, к сожалению, я должен использовать эту версию.

Мой вопрос: почему пространство пользователя может использовать эти символы из библиотеки toolchain, но пространства ядра нет?

Я думаю, что я пропустил некоторые основные функции ядра Linux.

ответ

1

Вы не можете связать ядро ​​с общими библиотеками. Если у вас есть статическая библиотека libssp, она МОЖЕТ работать, но для этого потребуется, чтобы библиотека не вызывала что-то еще, что могло бы вызвать проблемы в ядре.

В общем, проверка стека не является чем-то, что вы должны делать в ядре - я уверен, что это не особенно выгодно [я также уверен, что ядро ​​использует «защитную страницу», для каждого стека ядра].

+0

+1 Я предполагаю, что теоретически вы можете загрузить код из файла, отобразить его, выполнить и перезагрузить :) – 2013-03-01 17:31:52

1

Вы не можете использовать общие библиотеки в любом месте пространства ядра (в том числе как часть модулей ядра).

Вы можете думать о самих модулях ядра как эквивалент общих библиотек в пространстве ядра, но с множеством различий.

Модули ядра могут зависеть от exported symbols от других модулей ядра.

Мой вопрос: зачем пространство пользователя может использовать эти символы из toolchain библиотеки, но пространства ядра нет?

Ничто в пространстве ядра не имеет доступа к библиотеке C libc. Ядро имеет собственный набор встроенных стандартных функций манипуляции строками и т. Д., Которые вы могли бы использовать вместо этого. Библиотеки инструментальных цепей построены поверх libc.

+1 на ответ Маца. Вы можете использовать static library до тех пор, пока он не зависит от стандартных библиотек C, таких как libc

+0

Спасибо, Я успешно создаю свой модуль со статической библиотекой! – Jurasic

Смежные вопросы