GET_KERNEL_SYMS

Section: Linux Programmer's Manual (2)
Updated: 2017-09-15
Index JM Home Page roff page
 

名前

get_kernel_syms - 公開されているカーネルやモジュールのシンボルの取得  

書式

#include <linux/module.h>

int get_kernel_syms(struct kernel_sym *table);

注意: このシステムコールの宣言は glibc のヘッダーでは提供されていない。「注意」を参照。  

説明

注意: このシステムコールが存在するのは、カーネル 2.6 より前の Linux だけである。

get_kernel_syms() は、 table が NULL の場合、 問い合わせできるシンボルの数を返す。 NULL 以外の場合、以下の構造体の列 (table) に値を入れて返す。

struct kernel_sym {
    unsigned long value;
    char          name[60]; };

シンボルの中には、 #module-name という形式の、カーネルが空の名前を持っているマジックシンボル (magic symbol) が散在している。この形式のシンボルに対応する値は モジュールがロードされたアドレスとなる。

個々のモジュールから公開 (export) されたシンボルは、マジックモジュールタグ の後ろに置かれる。また、モジュールはロードされた順番とは逆順で返される。  

返り値

成功すると、 table にコピーされたシンボル数を返す。 エラーの場合、-1 を返し、 errno を適切に設定する。  

エラー

返る可能性があるエラーは一つだけである。
ENOSYS
get_kernel_syms() がこのバージョンのカーネルではサポートされていない。
 

バージョン

このシステムコールが存在するのはカーネル 2.4 までの Linux だけである。 Linux 2.6 では削除された。  

準拠

get_kernel_syms() は Linux 固有である。  

注意

この廃止されたシステムコールは glibc ではサポートされていない。 glibc ヘッダーでは宣言は提供されていないが、紆余曲折があり、 バージョン 2.23 より前の glibc ではこのシステムコールに対する ABI が公開されていた。そのため、このシステムコールを利用するには、自分のコードの中で手動でインターフェースを宣言すればよかった。 syscall(2) を使ってシステムコールを起動できた。  

バグ

table 用に確保したバッファーの大きさを伝える方法がない。 プログラムがシンボルテーブルの大きさを問い合わせた後に、カーネルに シンボルが追加されると、メモリーの内容が破壊されることになる。

公開されるシンボル名の長さが 59 文字に制限されている。

これらの制限があるので、このシステムコールを使うよりは query_module(2) を使うのが望ましい (現在では query_module(2) 自身もそのマニュアルページに書かれているように 他のインターフェースを使うのが望ましいとされている)。  

関連項目

create_module(2), delete_module(2), init_module(2), query_module(2)  

この文書について

この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。


 

Index

名前
書式
説明
返り値
エラー
バージョン
準拠
注意
バグ
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 16:46:41 GMT, November 24, 2023