cat /proc/kallsyms でカーネルシンボルを調べる
このステップでは、/proc
ファイルシステム内のもう 1 つの重要なファイル /proc/kallsyms
を探索します。このファイルには、明示的に static
とマークされていないすべてのカーネルシンボル (関数と変数) のアドレスと名前が含まれています。これは、カーネルのデバッグやカーネルの内部動作を理解するための重要なツールです。
/proc/kallsyms
ファイルには、各カーネルシンボルのメモリアドレス、タイプ、名前がリストされています。各行の形式は通常次の通りです。
<address> <type> <symbol_name>
<address>
: シンボルが配置されているメモリアドレス。
<type>
: シンボルのタイプを示す 1 文字 (例えば、t
または T
はテキスト/コード、d
または D
はデータ、b
または B
は BSS、r
または R
は読み取り専用データ、w
または W
は弱いシンボル、U
は未定義のシンボル)。小文字はローカルシンボルを示し、大文字はグローバルシンボルを示します。
<symbol_name>
: カーネル関数または変数の名前。
ターミナルが開いていない場合は、開きましょう。
次に、cat
コマンドを使用して /proc/kallsyms
の内容を表示しましょう。このファイルは非常に大きいので、出力が素早くスクロールすることに注意してください。
以下のコマンドを入力し、Enter キーを押します。
cat /proc/kallsyms
各行がカーネルシンボルを表す長いリストが表示されます。
...
ffffffff... T sys_read
ffffffff... T sys_write
ffffffff... D jiffies
...
この出力をより管理しやすくし、特定のシンボルを見つけるために、再び grep
を使用できます。たとえば、プロセスを管理するためのカーネルのコア関数である「schedule」に関連するシンボルを検索してみましょう。
以下のコマンドを入力し、Enter キーを押します。
cat /proc/kallsyms | grep schedule
これにより、出力がフィルタリングされ、「schedule」という単語を含む行のみが表示されます。
ffffffff... T schedule
ffffffff... T schedule_timeout
ffffffff... T schedule_hrtimeout_range
...
このフィルタリングされた出力は読みやすく、興味のある特定のカーネル関数または変数のアドレスとタイプを見つけることができます。
/proc/kallsyms
を探索することで、カーネルの構造と利用可能な関数について貴重な洞察を得ることができます。これは、カーネル開発や高度なデバッグを行う人にとって基本的なリソースです。
これで、/proc
ファイルシステムと基本的な Linux コマンドを使用して、カーネルの汚染状態を確認し、カーネルシンボルを調べる方法を学びました。
Continue をクリックしてこの実験を完了しましょう。