低レベルのシステムコール [閉じる]

低レベルのシステムコール [閉じる]

Cは、システムコール用のwrite()、read()、およびその他のライブラリ関数を提供します。 Linuxでライブラリを使用せずにCでシステムコールを作成するには?

ベストアンサー1

野心や純度に対する強すぎる欲求は、インラインアセンブリにつながる可能性があります。たとえば、x86_64システムでは、open(2)次のシステムコールを実行できます。

#include <sys/syscall.h>
int
linux_open(const char *pathname, unsigned long flags, unsigned long mode)
{
    long ret;
    asm volatile ("syscall" : "=a" (ret) : "a" (__NR_open),
              "D" (pathname), "S" (flags), "d" (mode) :
              "cc", "memory", "rcx",
              "r8", "r9", "r10", "r11" );
    if (ret < 0)
    {
        errno = -ret;
        ret = -1;
    }
    return (int) ret;
}

より理解しやすいlibcのソースコードを見ることができます(例:無実)システムコールがどのように実装されているかを理解します。

おすすめ記事