写一个glibc api的系统调用

可能重复:
需要glibc源的帮助

我明白如何在Linux内核中实现我们自己的系统调用。 我知道我们可以在ac程序中用syscall()_asm()来调用它。

  1. 但我想了解如何写这个新的系统调用glibc API?

  2. open()read() glibc函数如何在内核中调用映射到系统调用?

     char message[ ] = "Hello!\n"; int main( void ) { write( 1, message, 7 ); exit( 0 ); } 

当我将上面的程序转换成汇编时,它正在给出

 main: leal 4(%esp), %ecx andl $-16, %esp pushl -4(%ecx) pushl %ebp movl %esp, %ebp pushl %ecx subl $20, %esp movl $7, 8(%esp) movl $message, 4(%esp) movl $1, (%esp) call write movl $0, (%esp) call exit .size main, .-main .ident "GCC: (Debian 4.3.2-1.1) 4.3.2" .section .note.GNU-stack,"",@progbits 

3,在“通话写作”中,我认为写作是glibc电话吗? 那之后会发生什么? 它如何将glibc调用映射到系统调用?

Solutions Collecting From Web of "写一个glibc api的系统调用"

看到这样的答案,并回答类似的问题。 还请阅读关于系统调用 , linux内核 , linux系统调用的概述以及程序集的指导

glibc的write函数不是真正的系统调用。 这是一个包装(通过例如sysenter机器指令,可能与VDSO ,并设置errno sycall)。 您可以使用strace来了解某些程序所完成的系统调用。

例如, MUSL libc具有write.c write实现。 对于GNU libc,看看它的write.c 。