重複の可能性:
glibcソースのヘルプが必要
Linuxカーネルで独自のシステムコールを実装する方法を理解しています。私たちはこれをACプログラムでsyscall()
またはで呼び出すことができることを知っています。_asm()
しかし、この新しいシステムコール用にglibcapiを作成する方法を理解したいのですが。
open()
andread()
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、「call write」では、writeはここでglibcの呼び出しだと思いますか?その後どうなりますか?glibc呼び出しをシステムコールにどのようにマッピングしますか?