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