- Linux 2.6 は 2.4 とどう違うのですか?
- ソースカーネルを変更できますか?
- int 0x80 サービス ルーチンを変更できますか?
1485 次
2 に答える
6
更新:
1. 0x80 ハンドラは基本的に 2.4 と 2.6 で同じですが、ハンドラから呼び出される関数は 2.6 の x86-64 の「syscall」命令ハンドラによって呼び出されます。2. 0x80 ハンドラは、カーネルの残りの部分と同様に変更できます。
3. 下位互換性を削除しない限り、変更しても何も壊れません。たとえば、必要に応じて独自のトレースまたはバックドアを追加できます。ハンドラーを変更すると、ライブラリとツールチェーンが壊れるという他の投稿は正しくありません。ディスパッチ アルゴリズムを壊したり、ディスパッチ テーブルを誤って変更したりすると、問題が発生します。
3a. 最初に投稿したように、0x80 サービスを拡張する最善の方法は、システム コール ハンドラを拡張することです。
カーネルソースが言うように:
内容: カーネル syscall インターフェイス 説明: このインターフェースは、POSIX インターフェースの多くに一致し、ベースになっています。 それと他の Unix ベースのインターフェースで。にのみ追加されます 時間の経過とともに物が取り除かれないようにします。Note that this interface is different for every architecture that Linux supports. Please see the architecture-specific documentation for details on the syscall numbers that are to be mapped to each syscall.
i386 のシステム コール テーブル エントリは次
arch/i386/kernel/syscall_table.S
のとおりです。 テーブルは一連のポインタであることに注意してください。そのため、カーネル メンテナとのある程度の前方互換性を維持したい場合は、ポインタを配置する前にテーブルをパディングする必要があります。
syscall ベクトル番号は
irq_vectors
.hで定義されます。次に、traps.c が
system_call
を介して関数のアドレスを設定しset_system_gate
、エントリを割り込み記述子テーブルに配置します。関数自体はsystem_call
entry.S にあり、要求されたポインタをシステム コール テーブルから呼び出します。
コードを読むとわかるように、ハウスキーピングの詳細がいくつかありますが、0x80 割り込みハンドラーの直接の変更は、entry.S 内の
system_call
関数。もっとまともな方法として、ディスパッチ メカニズムを変更せずに独自の関数を挿入して、システム コール テーブルを変更できます。実際、2.6 のソースを読むと、今のところ int 0x80 と x86-64 syscall が同じコードを使用していると直接書かれています。したがって、x86-32 および x86-64 に移植可能な変更を加えることができます。
END Update
INT 0x80 メソッドは、システム コール テーブル ハンドラを呼び出します。これは、レジスタ引数を呼び出しテーブルに一致させ、EAX レジスタの内容に基づいてカーネル関数を呼び出します。システム コール テーブルを簡単に拡張して、カスタム カーネル API 関数を追加できます。
これは、システム コール テーブルも使用するため、x86-64 の新しい syscall コードでも機能する可能性があります。
現在のシステム コール テーブルを拡張以外の方法で変更すると、libc、init などを含むすべての依存ライブラリとコードが壊れます。
現在の Linux システム コール テーブルは次のとおりです: http://asm.sourceforge.net /syscall.html
于 2009-02-26T17:44:42.477 に答える
5
- 建築の見直しです。すべてが内部的に変更されました。SMP のサポートが完了し、プロセス スケジューラが大幅に改善され、メモリ管理がオーバーホールされ、その他多くのことが行われました。
- はい。オープンソースのソフトウェアです。ソースのコピーがない場合は、ベンダーまたはkernel.orgから入手できます。
- はい。ただし、既存のシステムコールのシーケンスを変更すると、libcが壊れたり、ベースレイアウトが壊れたり、ツールチェーンが壊れたりするため、お勧めできません。すべて可能です。
于 2009-02-26T17:36:37.563 に答える