НИУ МИЭТ, ИПОВС, КАИ |
Системные вызовы |
4 / 9 |
Системные вызовы Linux-32
int 0x80, %eax номер функции:
1 exit (%ebx код завершения);
2 fork;
3 read;
4 write
...
до 6 аргументов: %ebx, %ecx, %edx, %esi, %edi и %ebp
от 7 структура, адрес в %ebx
результат в %eax
Системные вызовы |
Параметры |
Системные вызовы Linux-32 |
stdlib и системные вызовы |
Итоги семестра |
Приветствие миру |
НИУ МИЭТ, ИПОВС, КАИ |
Системные вызовы |
5 / 9 |
stdlib и системные вызовы
Минимальная программа с stdlib (4704 байт)
1 .globl main // точка входа (stdlib)
2 main:
3xorl %eax, %eax // возвращаемое значение
4 ret // return 0 из main()
gcc -o min min.S
Минимальная программа без stdlib (600 байт)
1 |
.globl _start |
2 |
_start: // точка входа |
3 |
movl $1, %eax // системный вызов №1 sys_exit |
4xorl %ebx, %ebx // выход с кодом 0
5 |
int $0x80 |
// вызов ядра |
gcc -o min min.S -nostdlib
Системные вызовы |
Параметры |
Системные вызовы Linux-32 |
stdlib и системные вызовы |
Итоги семестра |
Приветствие миру |
|
НИУ МИЭТ, ИПОВС, КАИ |
Системные вызовы |
6 / 9 |
Приветствие миру |
|
|
1 |
.data |
|
|
|
|
2 |
msg: |
.string "Hello, world!\n" |
|
3 |
.global main // |
точка входа в программу |
|
4 |
main: |
|
|
|
|
5 |
pushl $msg |
// Адрес строки в стек |
|
6call puts
7 |
addl $4, %esp |
// Вычищаем параметр из стека |
8xorl %eax, %eax
9ret
1 |
.data |
|
|
2 |
msg: |
.ascii "Hello, world!\n" |
3 |
len = . - msg |
// символу len присваивается длина строки |
4 |
.global _start // |
точка входа в программу |
5 |
_start: |
|
|
6 |
movl $4, %eax |
// системный вызов №4 sys_write |
7movl $1, %ebx // поток №1 stdout
8 movl $msg, %ecx // указатель на выводимую строку 9 movl $len, %edx // длина строки
10int $0x80 // вызов ядра
11movl $1, %eax // системный вызов №1 sys_exit
12xorl %ebx, %ebx // выход с кодом 0
13int $0x80 // вызов ядра
Системные вызовы |
Параметры |
Системные вызовы Linux-32 |
stdlib и системные вызовы |
Итоги семестра |
Приветствие миру |