Как работает strace?

Он может отслеживать все используемые системные вызовы.

Но что отличает sys_call от обычного вызова?

Ответы

Ответ 1

Как сказал Мэтью, strace использует системный вызов

Ответ 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.