2

Linux Fedora にいくつかのカスタム システム コールを追加しています。現在、「syscall_32.tbl」を更新しようとしています。name唯一の問題は、呼び出しテーブルのフィールドが何を意味するのかよくわからないことです。

これは私たちが作り上げるものですか?この特定のシステム コールを呼び出すことにした名前のように?

たとえば、テーブルの構造は次のとおりです。

<number> <abi> <name> <entry point> <compat entry point>

セクションについて<name>は、これは私たちが決定してそこに入力するだけのパラメーターですか? それとも、システム コールが配置されているファイル名のような、より具体的なものですか?

4

2 に答える 2

6

カーネルにはシステム コール テーブルがあり、すべてのシステム コールとその実装関数がリストされています。ユーザランドはシステムコールのインデックス番号を指定してシステムコールを要求します。したがって、このインデックス番号は、カーネル コンパイルとユーザーランド コード コンパイルの間で一致する必要があります。このリストはエラーが発生しやすいため、見つけたシステム コール テーブルが導入され、そこからコードが自動的に生成されます。そのテーブルは、システム コールを相互に関連付けます。それらのインデックス番号、ユーザー ランドで使用される名前、およびシステム コールを実装するカーネル関数名です。は、このテーブルからMakefileヘッダー ファイルを生成します。

ヘッダー ファイルがありsyscalls_xx.h、カーネル内のテーブルを定義します (syscall を実装するすべてのカーネル関数をインデックスでリストします)。

別のヘッダー ファイルがあり、ユーザーランドに をunistd_xx.h提供し、syscall インデックス番号を名前別にリストします。あなたが求めている名前#defineフィールドはこのリストに入り、それによってユーザーランドはこのシステムコールを参照できます: . このヘッダー ファイルは、syscall インデックス番号を名前で参照できるように、ユーザー空間コードでコピーされて使用されます (これらの使用方法については、glibc のソースを参照してください)。__NR_<xxx>

syscall_32.tbl:

350     i386    finit_module            sys_finit_module

unistd_32.h:

#define __NR_finit_module 350

syscalls_32.h:

__SYSCALL_I386(350, sys_finit_module, sys_finit_module)
于 2013-10-29T02:44:03.987 に答える
0

システム コールの完全なリストを strace ソース コード内の相対システム コール番号とともに使用することもできます。たとえば、i386 システムの場合、リンクは次のとおりです。

strace sourceforge の syscallent.h (i386)

于 2013-11-10T09:10:46.407 に答える