Я пытаюсь реализовать системный вызов в Linux (RedHat Enterprise 8), и я немного озадачен тем, как он работает. Насколько я понимаю, я реализую оболочку в пользовательском режиме, которая помещает номер системного вызова в eax и параметры в ebx, ecx, edx и т. Д., А затем вызывает int 0x80, который вызывает соответствующий системный вызов. Мой вопрос таков: поскольку системный вызов написан как обычная функция C, как он узнает, какие регистры содержат какие параметры? Это соглашение или есть механизм для него, и если да, то где и как оно это делает?
РЕДАКТИРОВАТЬ: Это домашнее задание. Я знаю, что есть макросы syscall, которые могут сделать это для меня.