为系统调用写一个glibc api
可能重复:
需要glibc源的帮助
我明白如何在Linux内核中实现我们自己的系统调用。 我知道我们可以在ac程序中用syscall()
或_asm()
来调用它。
但我想了解如何为这个新的系统调用编写glibc api ?.
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调用映射到系统调用?
参见例如这个答案,并回答类似的问题。 另请阅读关于syscalls,linux内核,linux系统调用概述和程序集howto的更多信息
glibc的write
函数不是真正的系统调用。 这是一个包装(做sycall直通如sysenter
机器指令,也许跟VDSO,并设置errno
)。 您可以使用strace
来了解某些程序完成的系统调用。
例如,MUSL libc具有write.c write
实现。 对于GNU libc,看看它的write.c。