linuxでは、私はソースツリーを持っていることを前提に、すべてのシステムコールのソースコードを見つけることができますか?また、特定のシステムコールのソースコードとアセンブリを調べたい場合は、-my_system_callのように端末に入力できるものがありますか?システムコールのソースコードはどこにありますか?
答えて
システムコールの実際のソースを確認するには、Linuxカーネルソースが必要です。マニュアルページは、ローカルシステムにインストールされている場合は、呼び出し元のドキュメントのみが含まれています。
残念ながら、システムコールはカーネルツリー全体の特定の場所に保存されません。これは、さまざまなシステムコールがシステムのさまざまな部分(プロセス管理、ファイルシステム管理など)を参照できるため、システムの特定の部分に関連するツリーの部分からそれらを保存することは実行不可能であるためです。
あなたができることは、SYSCALL_DEFINE[0-6]
マクロを探すことです。与えられたコードブロックをシステムコールとして定義するために使用されます(明らかに)。
SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)
{
/* do freaky ioctl stuff */
}
このような定義はioctl
システムコールが宣言されていることを意味し、3つの引数を取ります。たとえば、fs/ioctl.c
は、次のコードを持っています。 SYSCALL_DEFINE
の横の数字は引数の数を意味します。
SYSCALL_DEFINE0(getpid)
{
return task_tgid_vnr(current);
}
希望を少し物事をクリアします:たとえば、getpid(void)
の場合には、kernel/timer.c
で宣言され、私たちは、次のコードを持っています。
アプリケーションの観点からは、system callは、kernelで行われる基本的な原子操作です。
Assembly Howtoは、マシンの命令に関して何が起こっているのかを説明します。
もちろん、カーネルはシステムコールを処理するときに多くのことを行っています。
実際には、カーネルコード全体がすべてのシステムコールを処理すると考えられます(これはまったく真実ではありませんが、ほとんどの場合、アプリケーションの観点からはカーネルはシステムコールを通してしか見えません)。 Daniel Kamil Kozarの他のanswerは、何らかのシステムコールの処理を開始しているカーネル機能を説明しています(しかし、カーネルの他の多くの部分が間接的にシステムコールに関与することがよくあります。成功したfork
システムコールによって作成された子プロセス)。
私はそれが古いですけど、私はあまりにも_system_call()
のソースを検索し、SYSTEM_CALLエントリポイントについてこのちらほら
実際のコードは、/ sys_callは/ usr/src/linuxの/カーネルで見つけることができますがわかりました。 Sシステムコールの多くの実際のコードは/usr/src/linux/kernel/sys.cにあり、残りは他の場所にあります。 findはあなたの友人です。
私はこのファイルも持っていないので、これは日付だと思います。しかし、grepはarch/x86/kernel/entry_64.SにENTRY(system_call)
が見つかり、個々のシステムコールを呼び出すものと思われます。私はintel-syntax x86 asmではないので、あなたが見たいと思っているかどうか見てみる必要があります。
メインライン4.8では 'entry_64.S'が存在しなくなりました。 – sherrellbc
- 1. .NET CoreのSystem.Stringのソースコードはどこにありますか?
- 2. .NETのMonitorクラスのソースコードはどこにありますか?
- 3. Androidのウェブブラウザのソースコードはどこにありますか?
- 4. Android SDKのlayoutoptツールのソースコードはどこにありますか?
- 5. アンドロイドのレイアウトのXMLソースコードはどこにありますか?
- 6. 最新のAndroidエミュレータのソースコードはどこにありますか?
- 7. PC MBRブートローダのソースコードはどこにありますか?
- 8. DjangoソースコードのModel.pyはどこにありますか?
- 9. libcrypto ++のソースコードはどこにありますか?
- 10. JavaやPythonのソースコードはどこにありますか?
- 11. netlib-javaのソースコードはどこにありますか?
- 12. TagLib#ライブラリのソースコードはどこにありますか?
- 13. Google App Engine Java: "CompiledCursor"のソースコードはどこにありますか?
- 14. Windowsコマンドのソースコードはどこにありますか?
- 15. ConstraintLayoutのソースコードはどこにありますか?
- 16. LinuxカーネルのARPソースコードはどこにありますか?
- 17. UIStoryboardSegue.swiftのソースコードはどこにありますか
- 18. Android UIコンポーネントのソースコードはどこにありますか?
- 19. railsの「rake assets:precompile」ソースコードはどこにありますか?
- 20. javax.swing.BorderLayoutクラスのソースコードはどこにありますか?
- 21. アンドロイドのachartengineソースコードはどこにありますか?
- 22. Vigenere暗号のJavaソースコードはどこにありますか?
- 23. Artifactory OSSのソースコードはどこにありますか?
- 24. Html.EditorForのソースコードはどこにありますか?
- 25. "more"コマンドのソースコードはどこにありますか?
- 26. gitkのソースコードはどこにありますか?
- 27. libfreeRDPソースコードの文書はどこにありますか?
- 28. MIDASライブラリのソースコードはどこにありますか?
- 29. TextView.setText(..)メソッドのソースコードはどこにありますか?
- 30. CastButtonFactoryのソースコードはどこにありますか
http://kernel.org/ – TJD