strace работает с использованием системного вызова ptrace, который заставляет ядро останавливать трассировку программы каждый раз, когда она входит или выходит из ядра через системный вызов. Программа трассировки (в данном случае strace) может затем проверить состояние программы с помощью ptrace.
strace получает аргументы для каждого системного вызова в зависимости от того, как работает эта система. В системах x86-64 аргументы системных вызовов передаются в регистры CPU. В этом случае strace может вызвать ptrace с аргументом PTRACE_GETREGS, чтобы получить копию значений регистра и распечатать их.
Ответ 3
Syscalls - это интерфейс между пользователем и пространством ядра. См. man 2 syscalls или syscalls.h для списка.
Их не следует путать со стандартными библиотечными функциями C, такими как printf. Они часто заканчиваются вызовом syscall, но не обязательно. Кроме того, программа пространства пользователя может вызывать syscall непосредственно с помощью функции syscall.