Linux System Calls

The interface between an application program and the Operating System is through system calls.

What is a system call?

The operating system is responsible for

An application program makes a system call to get the operating system to perform a service for it, like reading from a file.

One nice thing about syscalls is that you don't have to link with a C library, so your executables can be much smaller.

System Calls in 32-bit Linux

System Calls in 64-bit Linux

hello.s
# ----------------------------------------------------------------------------------------
# Writes "Hello, World" to the console using only system calls. Runs on 64-bit Linux only.
# To assemble and run:
#
#     gcc -c hello.s && ld hello.o && ./a.out
#
# or
#
#     gcc -nostdlib hello.s && ./a.out
# ----------------------------------------------------------------------------------------

        .global _start

        .text
_start:
        # write(1, message, 13)
        mov     $1, %rax                # system call 1 is write
        mov     $1, %rdi                # file handle 1 is stdout
        mov     $message, %rsi          # address of string to output
        mov     $13, %rdx               # number of bytes
        syscall                         # invoke operating system to do the write

        # exit(0)
        mov     $60, %rax               # system call 60 is exit
        xor     %rdi, %rdi              # we want return code 0
        syscall                         # invoke operating system to exit
message:
        .ascii  "Hello, world\n"

Lists of Linux System Calls

There are hundreds of system calls in Linux. A good online source for 32-bit Linux is http://syscalls.kernelgrok.com/ . For 64-bit Linux, check out http://www.acsu.buffalo.edu/~charngda/linux_syscalls_64bit.html

Check those pages, and of course, the Linux source.