75.4.2. Volání systému (Linuxového jádra)

write

Systém se volá instrukcí softwarového přerušení int $0x80. V registru %eax je číslo služby kterou voláme a v registrech %ebx, %ecx, %edx, %esi, %edi a %ebp jsou parametry volání. Tímto způsobem je možno předat až 6 parametrů. Pokud předáváme parametrů více, předávají se pomocí ukazatele na blok paměti. Tento ukazatel uložíme do registru %ebx. Návratová hodnota volání je obvykle vrácena v registru %eax.

        movl    $1, %eax        # Číslo volání/služby
        movl    $0, %ebx
        int     $0x80

Čísla jedotlivých volání najdeme v hlavičkovém souboru /usr/include/asm/unistd.h. V případě architektury intel/amd jsou to hlavičkové soubory /usr/include/asm/unistd_32.h a /usr/include/asm/unistd_64.h.

Tabulka 75.1. Tabulka vybraných systémových volání jádra

%eaxnázev parametry
0sys_restart_syscall  
1sys_exitebx=int
2sys_forkarch/x86/kernel/process_32.cebx=struct pt_regs
3sys_read 
4sys_write 
5sys_open 
6sys_close 
7sys_waitpid 
8sys_creat 
9sys_link 
10sys_unlink 
11sys_execve 
12sys_chdir 
13sys_time 
14sys_mknod 
15sys_chmod 
16sys_lchown 
17sys_break 
18sys_oldstat 
   
162sys_nanosleep 
   
180pread64 
181pwrite64 
0sys_ 
0sys_ 
321sys_signalfd 
322sys_timerfd_create 
323sys_eventfd 
324sys_fallocate 
325sys_timerfd_settime 
326sys_timerfd_gettime