0

mips アーキテクチャ用の SSP サポートを備えた Linux カーネル モジュールを構築しました。-fstack-protector-allをコンパイル フラグに追加しました。しかし、このモジュールをロードした後、__stack_chk_guardおよび__stack_chk_failへの未定義の参照があります。しかし、libssp.soをリンカに追加しました。これらのシンボルを次のようにカーネルにエクスポートする必要があるようです。

EXPORT_SYMBOL(__stack_chk_guard);

私のカーネルは古く、まだそれらを含んでいなかったからです。残念ながら、このバージョンを使用する必要があります。

私の質問は、ユーザー空間ではツールチェーン ライブラリからこのシンボルを使用できるのに、カーネル空間では使用できないのはなぜですか?

Linux カーネルの重要事項をいくつか見逃していたと思います。

4

2 に答える 2

1

カーネルを共有ライブラリにリンクすることはできません。libssp のスタティック ライブラリがある場合は、動作する可能性がありますが、ライブラリがカーネルで問題を引き起こすような別のものを呼び出していないことが必要です。

一般に、スタックチェックはカーネル上で行うべきものではありません - 私はそれが特に良い目的を果たさないと確信しています [また、カーネルが各カーネルスタックに対して「ガードページ」を使用していることも確信しています]。

于 2013-03-01T17:28:48.873 に答える
1

共有ライブラリは、カーネル空間 (カーネル モジュールの一部として含む) のどこでも使用できません。

カーネル モジュール自体は、カーネル空間の共有ライブラリと同等のものと考えることができますが、多くの違いがあります。

カーネル モジュールは、他のカーネル モジュールに依存できexported symbolsます。

私の質問は、ユーザー空間ではツールチェーン ライブラリからこのシンボルを使用できるのに、カーネル空間では使用できないのはなぜですか?

カーネル空間には、libcC ライブラリにアクセスできるものはありません。カーネルには、代わりに使用できる組み込みの標準文字列操作関数などの独自のセットがあります。ツールチェーン ライブラリは、上に構築されていlibcます。

マットの答えに+1。static library次のような標準 C ライブラリに依存しない限り、a を使用できます。libc

于 2013-03-01T17:38:09.420 に答える