Можно ли передать более семи аргументов системному вызову в arm linux? - PullRequest
0 голосов
/ 23 декабря 2018

В arm linux (EABI) номер системного вызова передается в r7, а аргументы могут передаваться в регистрах r0-r6

Ниже приведена таблица из ( syscall (2) )регистры, используемые для передачи аргументов системного вызова.

   arch/ABI      arg1  arg2  arg3  arg4  arg5  arg6  arg7  Notes
   ──────────────────────────────────────────────────────────────
   alpha         a0    a1    a2    a3    a4    a5    -
   arc           r0    r1    r2    r3    r4    r5    -
   arm/OABI      a1    a2    a3    a4    v1    v2    v3
   arm/EABI      r0    r1    r2    r3    r4    r5    r6

Мне просто любопытно, является ли семь максимальным числом аргументов, которое может быть передано на вооружение Linux в системном вызове.Можно ли передать больше аргументов?

1 Ответ

0 голосов
/ 24 декабря 2018

Для системных вызовов передача более 3-4 аргументов обычно является плюсом.Причина использования регистров при передаче аргументов системному вызову состоит в том, что обычно при переключении в режим ядра вы меняете стек, поэтому вам необходимо получить доступ к параметрам, хранящимся в пользовательском стеке, используя средства с низкой эффективностью.Когда вам нужно передать больше информации, чем вписывается в 7 регистров, вы обычно передаете указатель на структуру, которая содержит всю информацию (вероятно, вы уже видели это с некоторыми системными вызовами в используемой вами системе)

Для обычных вызовов процедур стек всегда существует, поэтому максимальное количество параметров не является проблемой.

...