C 实现我自己的系统调用

C 实现我自己的系统调用,c,system,glibc,libc,low-level,C,System,Glibc,Libc,Low Level,问题的后续行动。我正在编写自己的(非常基本的)标准库(使用-nostlibgcc选项编译)。似乎几乎所有事情的基础都是写,读,创建,打开,关闭,等等 据我所知,glibc只是使用存根、SYSCALL\u INTERNAL宏等来提供这些功能。我没有使用glibc,我不想变得非常复杂 我的问题。如果没有glibc,我如何调用Unix底层函数,如write和read?您可以直接从汇编语言进行系统调用,例如,对于Linux x86\u 64: main.c: long mywrite(int, cons

问题的后续行动。我正在编写自己的(非常基本的)标准库(使用
-nostlib
gcc选项编译)。似乎几乎所有事情的基础都是
创建
打开
关闭
,等等

据我所知,glibc只是使用存根、
SYSCALL\u INTERNAL
宏等来提供这些功能。我没有使用glibc,我不想变得非常复杂


我的问题。如果没有glibc,我如何调用Unix底层函数,如
write
read

您可以直接从汇编语言进行系统调用,例如,对于Linux x86\u 64:

main.c

long mywrite(int, const void *, unsigned long);

int main(void)
{
    char buffer[] = "Hello, world!\n";
    mywrite(1, buffer, 14);
    return 0;
}
write.S

.global mywrite

.text

mywrite:
        push    %rbp
        mov     %rsp, %rbp
        mov     $1, %rax
        syscall
        leave
        ret
输出:

paul@thoth:~/src/sandbox/syscall$ gcc -o sc main.c write.S
paul@thoth:~/src/sandbox/syscall$ ./sc
Hello, world!
paul@thoth:~/src/sandbox/syscall$ 

显然,这个实现没有设置
errno
或类似的设置,但这与实际进行系统调用无关。在汇编中实现单个
syscall()
函数,然后使用常规的C函数来调用它会更容易。

您可以直接从汇编语言进行系统调用,例如,对于Linux x86\u 64:

main.c

long mywrite(int, const void *, unsigned long);

int main(void)
{
    char buffer[] = "Hello, world!\n";
    mywrite(1, buffer, 14);
    return 0;
}
write.S

.global mywrite

.text

mywrite:
        push    %rbp
        mov     %rsp, %rbp
        mov     $1, %rax
        syscall
        leave
        ret
输出:

paul@thoth:~/src/sandbox/syscall$ gcc -o sc main.c write.S
paul@thoth:~/src/sandbox/syscall$ ./sc
Hello, world!
paul@thoth:~/src/sandbox/syscall$ 

显然,这个实现没有设置
errno
或类似的设置,但这与实际进行系统调用无关。在汇编中实现单个
syscall()
函数,然后使用常规的C函数来调用它会更容易。

所有Linux系统调用都是通过
syscall()实现的。
。您可以直接使用它,也可以查看它的源代码。有些有用的问题:所有Linux系统调用都是通过
syscall()
实现的。您可以直接使用它,也可以查看它的源代码。有点帮助的问题: