Поскольку @ user207421 упоминается в комментарии, write
, являющаяся C стандартной библиотечной функцией, должна в конечном итоге обернуть платформу, определяющую c запись системного вызова. В MacOS фасадный слой определен в libsystem_kernel.dylib
, который используется в стандартной реализации библиотеки MacOS C libSystem.B.dylib
. Номер системных вызовов не является общедоступным c интерфейсом и может изменяться в разных версиях MacOS. Кроме того, к отличной точке @fuz некоторые из них могут даже устареть и больше не иметь прямой syscall
записи / номера, но останутся поддерживаемыми слоем оболочки.
При запуске вашей программы вы можете проверить фактическую syscall
в действии в lldb с:
lldb ./a.out
b write
run
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x00007fff63e0f040 libsystem_kernel.dylib`write
libsystem_kernel.dylib`write:
-> 0x7fff63e0f040 <+0>: mov eax, 0x2000004
0x7fff63e0f045 <+5>: mov r10, rcx
0x7fff63e0f048 <+8>: syscall
0x7fff63e0f04a <+10>: jae 0x7fff63e0f054 ; <+20>
Target 0: (a.out) stopped.
(lldb)