为系统调用写一个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。

    链接地址: http://www.djcxy.com/p/90873.html

    上一篇: writing a glibc api for a system call

    下一篇: How to access the system call from user