Возможный дубликат:
Нужна помощь с исходным кодом glibc
Я понимаю, как реализовать наши собственные системные вызовы в ядре Linux. Я знаю, что мы можем вызвать это с помощью syscall()
или _asm()
в программе на языке C.
Но я хочу понять, как написать 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 с системным вызовом?