LINUX.ORG.RU

Как работают системные вызовы?


0

0

Плизз, помогите кто может!!! Очень нужна информация о том, как работают системные вызовы в линухе - до мельчайших подробностей: что куда пересылается и в какие регистры попадает. В любом случае буду рад любой инфе. Люди, помогите. Работа горит!!! Ответ можно на polcovnic@mail.ru

Первый параметр в eax, второй в ebx и т.д. Затем int 80h.

Вот пример на nasm.

SECTION .text
global _start:function
_start:
xor eax, eax
mov eax, 4 ;system call write()
mov ebx, 1 ;1-stdout
mov ecx, dword message
mov edx, msglen
int 80h

xor eax, eax
mov eax, 1 ;system call exit()
xor ebx, ebx ;exit(0)
int 80h
hlt
SECTION .data

message db 'Hello world',10
msglen equ $-message

anonymous
()

Да, кстате, по почте не проси - не хорошо.

anonymous
()
Ответ на: комментарий от anonymous

>Первый параметр в eax, второй в ebx и т.д. Затем int 80h.

При условии, что под первым параметром понимается номер системного вызова.

В общем, повторю другими словами. В EAX заносим номер системного вызова (см. /usr/src/linux/include/asm-i386/unistd.h), в остальные регистры --- параметры этого системного вызова, всего может быть до 6 параметров (в этом же файле приведены ассемблерные вставки, упрощающие запихивание параметров в регистры).

Потом INT 80h --- программное прерывание --- переход в контекст ядра.

Результат возвращается в AX, если он отрицательный --- это ошибка --- EAX == -errno.

Так все просто, только сложно понять, что какой syscall делает и в каком формате (структуре) он принимает/возвращает данные.

P.S. Подразумевается, что интересует архитектура 80x86, для других архитектур нужно смотреть другие asm- каталоги.

mky ★★★★★
()

Как горящая работа связана с системными вызовами? Может нужны какие примеры?

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.