Inline Assembler - Example of A System Call

Example of A System Call

Calling an operating system directly is generally impossible in the presence of protected memory. The OS runs at a more privileged level (kernel mode) than the user (user mode); a (software) interrupt is used to make requests to the operating system. This is rarely a feature in a higher-level language, and so wrapper functions for system calls are written using inline assembler.

The following C code are samples including a system call wrapper in AT&T assembler syntax with the GNU Assembler. They are normally written with the aid of macros; the full code is included for clarity.

The format of basic inline assembly is very much straightforward. Its basic form is

asm("assembly code");

Example:

asm("movl %ecx, %eax"); /* moves the contents of ecx to eax */

OR

__asm__("movb %bh, (%eax)"); /* moves the byte from bh to the memory pointed by eax */

Both asm and __asm__ are valid. __asm__ can be used if the keyword asm conflicts with something in your program.

extern int errno; int funcname(int arg1, int *arg2, int arg3) { int res; __asm__ volatile( "int $0x80" /* make the request to the OS */ : "=a" (res), /* return result in eax ("a") */ "+b" (arg1), /* pass arg1 in ebx ("b") */ "+c" (arg2), /* pass arg2 in ecx ("c") */ "+d" (arg3) /* pass arg3 in edx ("d") */ : "a" (128) /* pass system call number in eax ("a") */ : "memory", "cc"); /* announce to the compiler that the memory and condition codes have been modified */ /* The operating system will return a negative value on error; * wrappers return -1 on error and set the errno global variable */ if (-125 <= res && res < 0) { errno = -res; res = -1; } return res; }

Read more about this topic:  Inline Assembler

Famous quotes containing the words system and/or call:

    Nobody is glad in the gladness of another, and our system is one of war, of an injurious superiority. Every child of the Saxon race is educated to wish to be first. It is our system; and a man comes to measure his greatness by the regrets, envies, and hatreds of his competitors.
    Ralph Waldo Emerson (1803–1882)

    Books, not which afford us a cowering enjoyment, but in which each thought is of unusual daring; such as an idle man cannot read, and a timid one would not be entertained by, which even make us dangerous to existing institution—such call I good books.
    Henry David Thoreau (1817–1862)