Access Linux System Call in User Space
Table of Contents
1 Linux System Call
The operating system is responsible for
- Process Management (starting, running, stopping processes)
- File Management(creating, opening, closing, reading, writing, renaming files)
- Memory Management (allocating, deallocating memory)
- Other stuff (timing, scheduling, network management)
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.
2 System Calls in 32-bit X86 Linux
# -----------------------------------------------------------------------------
# A 32-bit Linux standalone program that writes "Hello, World" to the console
# using system calls only. The program does not need to link with any external
# libraries at all.
#
# System calls used:
# 4: write(fileid, bufferAddress, numberOfBytes)
# 1: exit(returnCode)
#
# Assemble:
# gcc -c hello.s
# Link:
# ld hello.o (to produce a.out)
# (or) ld -o hello hello.o (to produce hello)
#
# Or, you can assemble and link in one step:
# gcc -nostdlib hello.s
#
# The symbol _start is the default entry point for ld.
# -----------------------------------------------------------------------------
.global _start
.text
_start:
# write(1, message, 13)
mov $4, %eax # system call 4 is write
mov $1, %ebx # file handle 1 is stdout
mov $message, %ecx # address of string to output
mov $13, %edx # number of bytes to write
int $0x80 # invoke operating system code
# exit(0)
mov $1, %eax # system call 1 is exit
xor %ebx, %ebx # we want return code 0
int $0x80 # invoke operating system code
message:
.ascii "Hello, World\n"
3 System Calls in 32-bit ARM Linux
.section .data
msg:
.ascii "Hello world!\n"
len = . - msg
.section .text
.global _start
_start:
/* syscall write(int fd, const void *buf, size_t count) */
mov r0, #1
ldr r1, =msg
mov r2, #len
mov r7, #4
swi #0
/* syscall exit(int status) */
mov r0, #0
mov r7, #1
swi #0