システムコール機能は実行ファイルにどのようにリンクされますか?

システムコール機能は実行ファイルにどのようにリンクされますか?

単一のシステムコールで特徴付けられる無意味なプログラムを書いているとしましょうopen

#include <fcntl.h> 

void main()
{
    int hi = open("does not exist", 0);
}

プログラムをコンパイルしてldd出力に対してコマンドを実行すると、次の結果が表示されます。

linux-vdso.so.1 (0x00007ffddd741000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6835328000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6835584000)

そのリンクだけが認識されlibc.so.6、他のリンクは認識されません。

これらの他のライブラリの1つにカーネルシステムコールが含まれていますか?それとも、システムコール機能が静的に接続される可能性はありますか? (ありそうではありません)。

ベストアンサー1

システムコールは関数として直接表示されず、関数のようにリンクされません。各アーキテクチャは、64ビットx86でシステムコールを呼び出す独自の方法を定義します。これには特定のCPU命令が含まれます。SYSCALL

Cライブラリはほとんどのシステムコールをサポートしています(そして一般的なシステムコール機能ラップされていないシステムコールの場合) プログラムはここに接続されます。

プログラムにリンクされた他のライブラリは次のとおりです。動的リンカーそして仮想DSO

おすすめ記事