Processes Basic Information
рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рдЪрд▓ рд░рд╣реЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдХреЛрдб рдирд╣реАрдВ рдЪрд▓рд╛рддреА рд╣реИрдВ, рдпреЗ рдереНрд░реЗрдб рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдХреЗрд╡рд▓ рдЪрд▓ рд░рд╣реЗ рдереНрд░реЗрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░ рд╣реИрдВ рдЬреЛ рдореЗрдореЛрд░реА, рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░реНрд╕, рдкреЛрд░реНрдЯреНрд╕, рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВ...
рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ (PID 1 рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдХреЗ рднреАрддрд░ fork
рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рд╢реБрд░реВ рдХреА рдЬрд╛рддреА рдереАрдВ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдПрдХ рд╕рдЯреАрдХ рдкреНрд░рддрд┐ рдмрдирд╛рдПрдЧреА рдФрд░ рдлрд┐рд░ рдмрдЪреНрдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд╛рдорд╛рдиреНрдпрддрдГ execve
рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧреА рддрд╛рдХрд┐ рдирдП рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдлрд┐рд░, vfork
рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдореЗрдореЛрд░реА рдХреЙрдкреА рдХреЗ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рддреЗрдЬрд╝ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдлрд┐рд░ posix_spawn
рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЬреЛ vfork
рдФрд░ execve
рдХреЛ рдПрдХ рдХреЙрд▓ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлреНрд▓реИрдЧ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
POSIX_SPAWN_RESETIDS
: рдкреНрд░рднрд╛рд╡реА рдЖрдИрдбреА рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдИрдбреА рдкрд░ рд░реАрд╕реЗрдЯ рдХрд░реЗрдВ
POSIX_SPAWN_SETPGROUP
: рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдореВрд╣ рд╕рдВрдмрдВрдз рд╕реЗрдЯ рдХрд░реЗрдВ
POSUX_SPAWN_SETSIGDEF
: рд╕рд┐рдЧреНрдирд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗрдЯ рдХрд░реЗрдВ
POSIX_SPAWN_SETSIGMASK
: рд╕рд┐рдЧреНрдирд▓ рдорд╛рд╕реНрдХ рд╕реЗрдЯ рдХрд░реЗрдВ
POSIX_SPAWN_SETEXEC
: рдЙрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ Exec (рдЬреИрд╕реЗ execve
рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде)
POSIX_SPAWN_START_SUSPENDED
: рдирд┐рд▓рдВрдмрд┐рдд рд╢реБрд░реВ рдХрд░реЗрдВ
_POSIX_SPAWN_DISABLE_ASLR
: ASLR рдХреЗ рдмрд┐рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ
_POSIX_SPAWN_NANO_ALLOCATOR:
libmalloc рдХреЗ рдиреИрдиреЛ рдЖрд╡рдВрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
_POSIX_SPAWN_ALLOW_DATA_EXEC:
рдбреЗрдЯрд╛ рдЦрдВрдбреЛрдВ рдкрд░ rwx
рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ
POSIX_SPAWN_CLOEXEC_DEFAULT
: Exec(2) рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рдлрд╝рд╛рдЗрд▓ рд╡рд┐рд╡рд░рдг рдмрдВрдж рдХрд░реЗрдВ
_POSIX_SPAWN_HIGH_BITS_ASLR:
ASLR рд╕реНрд▓рд╛рдЗрдб рдХреЗ рдЙрдЪреНрдЪ рдмрд┐рдЯреНрд╕ рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрдирд╛рдПрдВ
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, posix_spawn
рдПрдХ posix_spawnattr
рдХреЗ рдПрдХ рдРрд░реЗ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЙрддреНрдкрдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдХреБрдЫ рдкрд╣рд▓реБрдУрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ posix_spawn_file_actions
рдХреЛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░реНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЬрдм рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдорд░ рдЬрд╛рддреА рд╣реИ, рддреЛ рдпрд╣ рдорд╛рддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд▓реМрдЯрдиреЗ рдХрд╛ рдХреЛрдб рднреЗрдЬрддреА рд╣реИ (рдпрджрд┐ рдорд╛рддрд╛ рдорд░ рдЧрдИ, рддреЛ рдирдпрд╛ рдорд╛рддрд╛ PID 1 рд╣реИ) рд╕рд┐рдЧреНрдирд▓ SIGCHLD
рдХреЗ рд╕рд╛рдеред рдорд╛рддрд╛ рдХреЛ рдЗрд╕ рдорд╛рди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ wait4()
рдпрд╛ waitid()
рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдФрд░ рдЬрдм рддрдХ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛, рдмрдЪреНрдЪрд╛ рдПрдХ рдЬрд╝реЛрдВрдмреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдпрд╣ рдЕрднреА рднреА рд╕реВрдЪреАрдмрджреНрдз рд╣реИ рд▓реЗрдХрд┐рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
PIDs
PIDs, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддреЗ рд╣реИрдВред XNU рдореЗрдВ PIDs 64рдмрд┐рдЯ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдирд┐рд░рдВрддрд░ рдмрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдХрднреА рд▓рдкреЗрдЯрддреЗ рдирд╣реАрдВ рд╣реИрдВ (рджреБрд░реБрдкрдпреЛрдЧ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП)ред
Process Groups, Sessions & Coalations
рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдХреЛ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕рдВрднрд╛рд▓рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрдорд╛рдВрдб рдПрдХ рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдореВрд╣ рдореЗрдВ рд╣реЛрдВрдЧреЗ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рд╕рд┐рдЧреНрдирд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЬреИрд╕реЗ рдХрд┐ рдХрд┐рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред
рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рддреНрд░реЛрдВ рдореЗрдВ рд╕рдореВрд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП ред рдЬрдм рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рд╕рддреНрд░ рд╢реБрд░реВ рдХрд░рддреА рд╣реИ (setsid(2)
), рддреЛ рдмрдЪреНрдЪреЛрдВ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рд╕рддреНрд░ рдХреЗ рднреАрддрд░ рд╕реЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд╕рддреНрд░ рд╢реБрд░реВ рди рдХрд░реЗрдВред
Coalition рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдбрд╛рд░реНрд╡рд┐рди рдореЗрдВ рд╕рдореВрд╣рд┐рдд рдХрд░рдиреЗ рдХрд╛ред рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рдХреЛрд▓реИрд╢рди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рд╕реЗ рдЙрд╕реЗ рдкреВрд▓ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ, рдПрдХ рд▓реЗрдЬрд░ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдпрд╛ рдЬреЗрдЯреНрд╕рдо рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ред рдХреЛрд▓реИрд╢рдиреНрд╕ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рднреВрдорд┐рдХрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ: рдиреЗрддрд╛, XPC рд╕реЗрд╡рд╛, рдПрдХреНрд╕рдЯреЗрдВрд╢рдиред
Credentials & Personae
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд░рдЦрддреА рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддреА рд╣реИ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХ uid
рдФрд░ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХ gid
рд╣реЛрдЧрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрдИ рд╕рдореВрд╣реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред
рдпрджрд┐ рдмрд╛рдЗрдирд░реА рдореЗрдВ setuid/setgid
рдмрд┐рдЯ рд╣реИ рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд╕рдореВрд╣ рдЖрдИрдбреА рдХреЛ рдмрджрд▓рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред
рдирдП uids/gids рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВ ред
рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ persona
рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХрд╛ред рдПрдХ рд╡реНрдпрдХреНрддрд┐рддреНрд╡ рдХреЛ рдЕрдкрдирд╛рдиреЗ рд╕реЗ рдЗрд╕рдХреЗ uid, gid рдФрд░ рд╕рдореВрд╣ рд╕рджрд╕реНрдпрддрд╛ рдПрдХ рд╕рд╛рде рдорд╛рди рд▓реА рдЬрд╛рддреА рд╣реИред рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ:
Copy struct kpersona_info { uint32_t persona_info_version;
uid_t persona_id; /* overlaps with UID */
int persona_type;
gid_t persona_gid;
uint32_t persona_ngroups;
gid_t persona_groups[NGROUPS];
uid_t persona_gmuid;
char persona_name[MAXLOGNAME + 1 ];
/* TODO: MAC policies?! */
}
Threads Basic Information
POSIX Threads (pthreads): macOS POSIX рдереНрд░реЗрдбреНрд╕ (pthreads
) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ C/C++ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рдереНрд░реЗрдбрд┐рдВрдЧ API рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВред macOS рдореЗрдВ pthreads рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди /usr/lib/system/libsystem_pthread.dylib
рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз libpthread
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдЖрддрд╛ рд╣реИред рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдереНрд░реЗрдб рдмрдирд╛рдиреЗ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
Creating Threads: pthread_create()
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирдП рдереНрд░реЗрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди bsdthread_create()
рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ XNU рдХрд░реНрдиреЗрд▓ (рдЬрд┐рд╕ рдкрд░ macOS рдЖрдзрд╛рд░рд┐рдд рд╣реИ) рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдХ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд╣реИред рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд╡рд┐рднрд┐рдиреНрди рдлреНрд▓реИрдЧ рд▓реЗрддрд╛ рд╣реИ рдЬреЛ pthread_attr
(рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ) рд╕реЗ рдирд┐рдХрд╛рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдереНрд░реЗрдб рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдиреАрддрд┐рдпрд╛рдБ рдФрд░ рд╕реНрдЯреИрдХ рдЖрдХрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
Default Stack Size: рдирдП рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдЯреИрдХ рдЖрдХрд╛рд░ 512 KB рд╣реИ, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рд▓реЗрдХрд┐рди рдпрджрд┐ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕реНрдерд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рддреЛ рдереНрд░реЗрдб рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
Thread Initialization: __pthread_init()
рдлрд╝рдВрдХреНрд╢рди рдереНрд░реЗрдб рд╕реЗрдЯрдЕрдк рдХреЗ рджреМрд░рд╛рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬреЛ env[]
рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрдЯреИрдХ рдХреЗ рд╕реНрдерд╛рди рдФрд░ рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
Thread Termination in macOS
Exiting Threads: рдереНрд░реЗрдб рдХреЛ рдЖрдорддреМрд░ рдкрд░ pthread_exit()
рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдереНрд░реЗрдб рдХреЛ рд╕рд╛рдл-рд╕реБрдерд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЖрд╡рд╢реНрдпрдХ рд╕рдлрд╛рдИ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдереНрд░реЗрдб рдХреЛ рдХрд┐рд╕реА рднреА рдЬреЙрдЗрдирд░ рдХреЛ рдПрдХ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
Thread Cleanup: pthread_exit()
рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░, рдлрд╝рдВрдХреНрд╢рди pthread_terminate()
рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рднреА рд╕рдВрдмрдВрдзрд┐рдд рдереНрд░реЗрдб рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдордЪ рдереНрд░реЗрдб рдкреЛрд░реНрдЯ рдХреЛ рдбрд┐рдЕрд▓реЙрдХреЗрдЯ рдХрд░рддрд╛ рд╣реИ (рдордЪ XNU рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд╕рдВрдЪрд╛рд░ рдЙрдкрдкреНрд░рдгрд╛рд▓реА рд╣реИ) рдФрд░ bsdthread_terminate
рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ syscall рд╣реИ рдЬреЛ рдереНрд░реЗрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд░реНрдиреЗрд▓-рд╕реНрддрд░реАрдп рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред
Synchronization Mechanisms
рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рд░реЗрд╕ рдХрдВрдбреАрд╢рдВрд╕ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, macOS рдХрдИ рд╕рдордиреНрд╡рдп рдкреНрд░рд╛рдЗрдорд┐рдЯрд┐рд╡ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпреЗ рдорд▓реНрдЯреА-рдереНрд░реЗрдбрд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдЕрдЦрдВрдбрддрд╛ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реНрдерд┐рд░рддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ:
Regular Mutex (Signature: 0x4D555458): рдорд╛рдирдХ рдореНрдпреВрдЯреЗрдХреНрд╕ рдЬрд┐рд╕рдХрд╛ рдореЗрдореЛрд░реА рдлрд╝реБрдЯрдкреНрд░рд┐рдВрдЯ 60 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ (56 рдмрд╛рдЗрдЯреНрд╕ рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдФрд░ 4 рдмрд╛рдЗрдЯреНрд╕ рд╕рд┐рдЧреНрдиреЗрдЪрд░ рдХреЗ рд▓рд┐рдП)ред
Fast Mutex (Signature: 0x4d55545A): рдПрдХ рдирд┐рдпрдорд┐рдд рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреЗ рд╕рдорд╛рди рд▓реЗрдХрд┐рди рддреЗрдЬрд╝ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд, рдЖрдХрд╛рд░ рдореЗрдВ рднреА 60 рдмрд╛рдЗрдЯреНрд╕ред
рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЖрдХрд╛рд░ 44 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ (40 рдмрд╛рдЗрдЯреНрд╕ рдкреНрд▓рд╕ 4-рдмрд╛рдЗрдЯ рд╕рд┐рдЧреНрдиреЗрдЪрд░)ред
Condition Variable Attributes (Signature: 0x434e4441): рдХрдВрдбреАрд╢рди рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ, рдЖрдХрд╛рд░ рдореЗрдВ 12 рдмрд╛рдЗрдЯреНрд╕ред
Once Variable (Signature: 0x4f4e4345):
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХрдХрд░рдг рдХреЛрдб рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ 12 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред
рдПрдХ рд╕рдордп рдореЗрдВ рдХрдИ рдкрд╛рдардХреЛрдВ рдпрд╛ рдПрдХ рд▓реЗрдЦрдХ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╕рд╛рдЭрд╛ рдбреЗрдЯрд╛ рддрдХ рдХреБрд╢рд▓ рдкрд╣реБрдБрдЪ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
Read Write Lock (Signature: 0x52574c4b): рдЖрдХрд╛рд░ рдореЗрдВ 196 рдмрд╛рдЗрдЯреНрд╕ред
Read Write Lock Attributes (Signature: 0x52574c41): рдкрдврд╝рдиреЗ-рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓реЙрдХ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ, рдЖрдХрд╛рд░ рдореЗрдВ 20 рдмрд╛рдЗрдЯреНрд╕ред
рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЕрдВрддрд┐рдо 4 рдмрд╛рдЗрдЯреНрд╕ рдУрд╡рд░рдлреНрд▓реЛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
Thread Local Variables (TLV)
Thread Local Variables (TLV) рдореИрдХ-рдУ рдлрд╝рд╛рдЗрд▓реЛрдВ (macOS рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░реВрдк) рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХреЗрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рдкрд╛рд╕ рдПрдХ рдЪрд░ рдХрд╛ рдЕрдкрдирд╛ рдЕрд▓рдЧ рдЙрджрд╛рд╣рд░рдг рд╣реЛ, рдЬрд┐рд╕рд╕реЗ рд╕рдВрдШрд░реНрд╖реЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдФрд░ рдбреЗрдЯрд╛ рдХреА рдЕрдЦрдВрдбрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рд╣реЛрддрд╛ рд╣реИ рдмрд┐рдирд╛ рдореНрдпреВрдЯреЗрдХреНрд╕ рдЬреИрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╕рдордиреНрд╡рдп рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗред
C рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдЖрдк __thread
рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдереНрд░реЗрдб-рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдпрд╣ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
Copy cCopy code__thread int tlv_var;
void main ( int argc , char ** argv){
tlv_var = 10 ;
}
Copy рдпрд╣ рд╕реНрдирд┐рдкреЗрдЯ `tlv_var` рдХреЛ рдПрдХ рдереНрд░реЗрдб-рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдЕрдкрдирд╛ `tlv_var` рд░рдЦреЗрдЧрд╛, рдФрд░ рдПрдХ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ `tlv_var` рдореЗрдВ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди рджреВрд╕рд░реЗ рдереНрд░реЗрдб рдореЗрдВ `tlv_var` рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
Mach-O рдмрд╛рдЗрдирд░реА рдореЗрдВ, рдереНрд░реЗрдб рд╕реНрдерд╛рдиреАрдп рдЪрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
* ** `__DATA.__thread_vars` ** : рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдереНрд░реЗрдб-рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ред
* ** `__DATA.__thread_bss` ** : рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рдереНрд░реЗрдб-рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рд╢реВрдиреНрдп-рдкреНрд░рд╛рд░рдВрднрд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рдореЗрдореЛрд░реА рдХрд╛ рдПрдХ рднрд╛рдЧ рд╣реИред
Mach-O рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ API рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ ** `tlv_atexit` ** рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдереНрд░реЗрдб рдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдереНрд░реЗрдб-рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдпрд╣ API рдЖрдкрдХреЛ **рд╡рд┐рдирд╛рд╢рдХ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ** рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИтАФрд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рдЬреЛ рдереНрд░реЗрдб рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдереНрд░реЗрдб-рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛ рдХреЛ рд╕рд╛рдл рдХрд░рддреЗ рд╣реИрдВред
### рдереНрд░реЗрдбрд┐рдВрдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдБ
рдереНрд░реЗрдб рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдпрд╣ рджреЗрдЦрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдХрд┐ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдереНрд░реЗрдб рдХрдм рдЪрд▓рд╛рдП рдЬрд╛рдПрдБред рдпрд╣ рдирд┐рд░реНрдгрдп рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЛ рд╕реМрдВрдкреЗ рдЧрдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реНрддрд░ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддрд╛ рд╣реИред macOS рдФрд░ рдпреВрдирд┐рдХреНрд╕-рдЬреИрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ, рдЗрд╕реЗ `nice` , `renice` , рдФрд░ рдЧреБрдгрд╡рддреНрддрд╛ рд╕реЗрд╡рд╛ (QoS) рд╡рд░реНрдЧреЛрдВ рдЬреИрд╕реЗ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред
#### рдирд╛рдЗрд╕ рдФрд░ рд░реЗрдирд╛рдЗрд╕
1. **рдирд╛рдЗрд╕:**
* рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ `nice` рдорд╛рди рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдПрдХ рдирд╛рдЗрд╕ рдорд╛рди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ -20 (рд╕рдмрд╕реЗ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛) рд╕реЗ 19 (рд╕рдмрд╕реЗ рдирд┐рдореНрди рдкреНрд░рд╛рдердорд┐рдХрддрд╛) рдХреЗ рдмреАрдЪ рд╣реЛрддрд╛ рд╣реИред рдЬрдм рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╛рдЗрд╕ рдорд╛рди рдЖрдорддреМрд░ рдкрд░ 0 рд╣реЛрддрд╛ рд╣реИред
* рдПрдХ рдирд┐рдореНрди рдирд╛рдЗрд╕ рдорд╛рди (рдЬреЛ -20 рдХреЗ рдХрд░реАрдм рд╣реЛрддрд╛ рд╣реИ) рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдзрд┐рдХ "рд╕реНрд╡рд╛рд░реНрдереА" рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕реЗ рдЙрдЪреНрдЪ рдирд╛рдЗрд╕ рдорд╛рди рд╡рд╛рд▓реА рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ CPU рд╕рдордп рдорд┐рд▓рддрд╛ рд╣реИред
2. **рд░реЗрдирд╛рдЗрд╕:**
* `renice` рдПрдХ рдХрдорд╛рдВрдб рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓ рд░рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдирд╛рдЗрд╕ рдорд╛рди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рддреЛ рдЙрдирдХреЗ CPU рд╕рдордп рдЖрд╡рдВрдЯрди рдХреЛ рдирдП рдирд╛рдЗрд╕ рдорд╛рдиреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдврд╝рд╛рдиреЗ рдпрд╛ рдШрдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
* рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ CPU рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк `renice` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдирд╛рдЗрд╕ рдорд╛рди рдХреЛ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
#### рдЧреБрдгрд╡рддреНрддрд╛ рд╕реЗрд╡рд╛ (QoS) рд╡рд░реНрдЧ
QoS рд╡рд░реНрдЧ рдереНрд░реЗрдб рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рдЖрдзреБрдирд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ macOS рдЬреИрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЬреЛ **рдЧреНрд░реИрдВрдб рд╕реЗрдВрдЯреНрд░рд▓ рдбрд┐рд╕реНрдкреИрдЪ (GCD)** рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред QoS рд╡рд░реНрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрдирдХреЗ рдорд╣рддреНрд╡ рдпрд╛ рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдореЗрдВ **рд╢реНрд░реЗрдгреАрдмрджреНрдз** рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред macOS рдЗрди QoS рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдереНрд░реЗрдб рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ:
1. **рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡:**
* рдпрд╣ рд╡рд░реНрдЧ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдЕрдЪреНрдЫреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрдЪреНрдЪрддрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рддреА рд╣реИ рддрд╛рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЙрддреНрддрд░рджрд╛рдпреА рдмрдирд╛ рд░рд╣реЗ (рдЬреИрд╕реЗ, рдПрдирд┐рдореЗрд╢рди рдпрд╛ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ)ред
2. **рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЖрд░рдВрднрд┐рдд:**
* рд╡реЗ рдХрд╛рд░реНрдп рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЖрд░рдВрдн рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЦреЛрд▓рдирд╛ рдпрд╛ рдПрдХ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рдЬреЛ рдЧрдгрдирд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпреЗ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рд╣реЛрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╕реЗ рдиреАрдЪреЗ рд╣реЛрддреЗ рд╣реИрдВред
3. **рдпреВрдЯрд┐рд▓рд┐рдЯреА:**
* рдпреЗ рдХрд╛рд░реНрдп рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдкреНрд░рдЧрддрд┐ рд╕рдВрдХреЗрддрдХ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ, рдлрд╝рд╛рдЗрд▓реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛, рдбреЗрдЯрд╛ рдЖрдпрд╛рдд рдХрд░рдирд╛)ред рдпреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЖрд░рдВрднрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдореЗрдВ рдХрдо рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЗрдиреНрд╣реЗрдВ рддреБрд░рдВрдд рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
4. **рдкреГрд╖реНрдарднреВрдорд┐:**
* рдпрд╣ рд╡рд░реНрдЧ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдп рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдпреЗ рдХрд╛рд░реНрдп рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛, рд╕рдордиреНрд╡рдп, рдпрд╛ рдмреИрдХрдЕрдк рдЬреИрд╕реЗ рдХрд╛рд░реНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрдирдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕рдмрд╕реЗ рдХрдо рд╣реЛрддреА рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдиреНрдпреВрдирддрдо рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИред
QoS рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕рдЯреАрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдХрд╛рд░реНрдп рдХреА рдкреНрд░рдХреГрддрд┐ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╕рд┐рд╕реНрдЯрдо рддрджрдиреБрд╕рд╛рд░ CPU рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рднрд┐рдиреНрди **рдереНрд░реЗрдб рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдиреАрддрд┐рдпрд╛рдБ** рд╣реИрдВ рдЬреЛ рд╢реЗрдбреНрдпреВрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕реЗрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреА рд╣реИрдВред рдЗрд╕реЗ `thread_policy_[set/get]` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд░реЗрд╕ рдХрдВрдбреАрд╢рди рд╣рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
## MacOS рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреБрд░реБрдкрдпреЛрдЧ
MacOS, рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рддрд░рд╣, **рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЗрдВрдЯрд░реИрдХреНрдЯ, рд╕рдВрд╡рд╛рдж, рдФрд░ рдбреЗрдЯрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ** рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдзрд┐рдпрд╛рдБ рдФрд░ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЬрдмрдХрд┐ рдпреЗ рддрдХрдиреАрдХреЗрдВ рдХреБрд╢рд▓ рдкреНрд░рдгрд╛рд▓реА рдХрд╛рд░реНрдпрдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ, рдЗрдиреНрд╣реЗрдВ рдЦрддрд░реЗ рдХреЗ рддрддреНрд╡реЛрдВ рджреНрд╡рд╛рд░рд╛ **рджреБрд╖реНрдЯ рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ** рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
### рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЗрдВрдЬреЗрдХреНрд╢рди
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЗрдВрдЬреЗрдХреНрд╢рди рдПрдХ рддрдХрдиреАрдХ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ **рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдПрдХ рджреБрд╖реНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ** ред рдПрдХ рдмрд╛рд░ рдЗрдВрдЬреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рдХреНрд╖рд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рдорд╛рди рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдФрд░ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
<div data-gb-custom-block data-tag="content-ref" data-url='macos-library-injection/'>
[ macos-library-injection ](macos-library-injection/)
</div>
### рдлрд╝рдВрдХреНрд╢рди рд╣реБрдХрд┐рдВрдЧ
рдлрд╝рдВрдХреНрд╢рди рд╣реБрдХрд┐рдВрдЧ рдореЗрдВ **рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЛрдб рдХреЗ рднреАрддрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓** рдпрд╛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ **рдЕрд╡рд░реЛрдзрд┐рдд рдХрд░рдирд╛** рд╢рд╛рдорд┐рд▓ рд╣реИред рдлрд╝рдВрдХреНрд╢рдиреЛрдВ рдХреЛ рд╣реБрдХ рдХрд░рдХреЗ, рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ **рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд** рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рд╡рд╛рд╣ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
<div data-gb-custom-block data-tag="content-ref" data-url='macos-function-hooking.md'>
[ macos-function-hooking.md ](macos-function-hooking.md)
</div>
### рдЗрдВрдЯрд░ рдкреНрд░реЛрд╕реЗрд╕ рд╕рдВрдЪрд╛рд░
рдЗрдВрдЯрд░ рдкреНрд░реЛрд╕реЗрд╕ рд╕рдВрдЪрд╛рд░ (IPC) рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ **рдбреЗрдЯрд╛ рд╕рд╛рдЭрд╛ рдФрд░ рд╡рд┐рдирд┐рдордп** рдХрд░рддреА рд╣реИрдВред рдЬрдмрдХрд┐ IPC рдХрдИ рд╡реИрдз рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдореМрд▓рд┐рдХ рд╣реИ, рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрд▓рдЧрд╛рд╡ рдХреЛ рдХрдордЬреЛрд░ рдХрд░рдиреЗ, рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рд▓реАрдХ рдХрд░рдиреЗ, рдпрд╛ рдЕрдирдзрд┐рдХреГрдд рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
<div data-gb-custom-block data-tag="content-ref" data-url='macos-ipc-inter-process-communication/'>
[ macos-ipc-inter-process-communication ](macos-ipc-inter-process-communication/)
</div>
### рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЗрдВрдЬреЗрдХреНрд╢рди
рд╡рд┐рд╢рд┐рд╖реНрдЯ env рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
<div data-gb-custom-block data-tag="content-ref" data-url='macos-electron-applications-injection.md'>
[ macos-electron-applications-injection.md ](macos-electron-applications-injection.md)
</div>
### рдХреНрд░реЛрдорд┐рдпрдо рдЗрдВрдЬреЗрдХреНрд╢рди
рдпрд╣ **рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдореИрди рдЗрди рдж рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣рдорд▓реЗ** рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `--load-extension` рдФрд░ `--use-fake-ui-for-media-stream` рдлреНрд▓реИрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕, рдЯреНрд░реИрдлрд╝рд┐рдХ, рдХреБрдХреАрдЬрд╝ рдЪреБрд░рд╛рдиреЗ, рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ...:
<div data-gb-custom-block data-tag="content-ref" data-url='macos-chromium-injection.md'>
[ macos-chromium-injection.md ](macos-chromium-injection.md)
</div>
### рдЧрдВрджрд╛ NIB
NIB рдлрд╝рд╛рдЗрд▓реЗрдВ **рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (UI) рддрддреНрд╡реЛрдВ** рдФрд░ рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рднреАрддрд░ рдЙрдирдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡реЗ **рдордирдорд╛рдиреЗ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд** рдХрд░ рд╕рдХрддреА рд╣реИрдВ рдФрд░ **рдЧреЗрдЯрдХреАрдкрд░** рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИ рдпрджрд┐ рдПрдХ **NIB рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ** ред рдЗрд╕рд▓рд┐рдП, рдЗрдиреНрд╣реЗрдВ рдордирдорд╛рдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдордирдорд╛рдиреЗ рдЖрджреЗрд╢ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
<div data-gb-custom-block data-tag="content-ref" data-url='macos-dirty-nib.md'>
[ macos-dirty-nib.md ](macos-dirty-nib.md)
</div>
### рдЬрд╛рд╡рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЗрдВрдЬреЗрдХреНрд╢рди
рдХреБрдЫ рдЬрд╛рд╡рд╛ рдХреНрд╖рдорддрд╛рдУрдВ (рдЬреИрд╕реЗ ** `_JAVA_OPTS` ** env рд╡реЗрд░рд┐рдПрдмрд▓) рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЬрд╛рд╡рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ **рдордирдорд╛рдирд╛ рдХреЛрдб/рдЖрджреЗрд╢** рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
<div data-gb-custom-block data-tag="content-ref" data-url='macos-java-apps-injection.md'>
[ macos-java-apps-injection.md ](macos-java-apps-injection.md)
</div>
### .Net рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЗрдВрдЬреЗрдХреНрд╢рди
рдпрд╣ **.Net рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛** рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ .Net рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдХреЛрдб рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ (рдЬреЛ macOS рд╕реБрд░рдХреНрд╖рд╛ рдЬреИрд╕реЗ рд░рдирдЯрд╛рдЗрдо рд╣рд╛рд░реНрдбрдирд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ)ред
<div data-gb-custom-block data-tag="content-ref" data-url='macos-.net-applications-injection.md'>
[ macos-.net-applications-injection.md ](macos-.net-applications-injection.md)
</div>
### рдкрд░реНрд▓ рдЗрдВрдЬреЗрдХреНрд╢рди
рдордирдорд╛рдирд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
<div data-gb-custom-block data-tag="content-ref" data-url='macos-perl-applications-injection.md'>
[ macos-perl-applications-injection.md ](macos-perl-applications-injection.md)
</div>
### рд░реВрдмреА рдЗрдВрдЬреЗрдХреНрд╢рди
рдпрд╣ рдордирдорд╛рдиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдордирдорд╛рдирд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реВрдмреА env рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ:
<div data-gb-custom-block data-tag="content-ref" data-url='macos-ruby-applications-injection.md'>
[ macos-ruby-applications-injection.md ](macos-ruby-applications-injection.md)
</div>
### рдкрд╛рдпрдерди рдЗрдВрдЬреЗрдХреНрд╢рди
рдпрджрд┐ рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реЗрд░рд┐рдПрдмрд▓ ** `PYTHONINSPECT` ** рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкрд╛рдпрдерди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдкрд╛рдпрдерди CLI рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧреАред рдпрд╣ ** `PYTHONSTARTUP` ** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╕рддреНрд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╕рдВрднрд╡ рд╣реИред\
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ ** `PYTHONSTARTUP` ** рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧреА рдЬрдм ** `PYTHONINSPECT` ** рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╕рддреНрд░ рдмрдирд╛рддрд╛ рд╣реИред
рдЕрдиреНрдп env рд╡реЗрд░рд┐рдПрдмрд▓ рдЬреИрд╕реЗ ** `PYTHONPATH` ** рдФрд░ ** `PYTHONHOME` ** рднреА рдордирдорд╛рдирд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ ** `pyinstaller` ** рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдЗрди рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рднрд▓реЗ рд╣реА рд╡реЗ рдПрдореНрдмреЗрдбреЗрдб рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд▓ рд░рд╣реЗ рд╣реЛрдВред
<div data-gb-custom-block data-tag="hint" data-style='danger'>
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдореИрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрдерди рдХреЛ рдордирдорд╛рдирд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдвреВрдВрдв рд╕рдХрд╛ред\
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ **Hombrew** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрдерди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП **рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рд╕реНрдерд╛рди** рдореЗрдВ рдкрд╛рдпрдерди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ред рдЖрдк рдЗрд╕реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рд╛рдЗрдЬреИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
Copy mv /opt/homebrew/bin/python3 /opt/homebrew/bin/python3.old
cat > /opt/homebrew/bin/python3 << EOF
#!/bin/bash
# Extra hijack code
/opt/homebrew/bin/python3.old "$@"
EOF
chmod +x /opt/homebrew/bin/python3
Even root will run this code when running python.
Detection
Shield
Shield (Github ) рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ рдкреНрд░реЛрд╕реЗрд╕ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ:
рдкрд░реНрдпрд╛рд╡рд░рдгреАрдп рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП: рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░реНрдпрд╛рд╡рд░рдгреАрдп рдЪрд░ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдЧрд╛: DYLD_INSERT_LIBRARIES
, CFNETWORK_LIBRARY_PATH
, RAWCAMERA_BUNDLE_PATH
рдФрд░ ELECTRON_RUN_AS_NODE
task_for_pid
рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП: рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдХ рдкреНрд░реЛрд╕реЗрд╕ рджреВрд╕рд░реЗ рдХрд╛ рдЯрд╛рд╕реНрдХ рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдВ рдХреЛрдб рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рдРрдкреНрд╕ рдкреИрд░рд╛рдореАрдЯрд░ : рдХреЛрдИ --inspect
, --inspect-brk
рдФрд░ --remote-debugging-port
рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рдРрдк рдХреЛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЛрдб рдореЗрдВ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЗрд╕рдореЗрдВ рдХреЛрдб рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╕рд┐рдВрдмрд▓рд┐рдВрдХреНрд╕ рдпрд╛ рд╣рд╛рд░реНрдбрд▓рд┐рдВрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП: рдЖрдорддреМрд░ рдкрд░ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рджреБрд░реБрдкрдпреЛрдЧ рд╣реИ рд╣рдорд╛рд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд▓рд┐рдВрдХ рд░рдЦрдирд╛ , рдФрд░ рдЗрд╕реЗ рдПрдХ рдЙрдЪреНрдЪ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╕реНрдерд╛рди рдХреА рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ред рд╣рд╛рд░реНрдбрд▓рд┐рдВрдХ рдФрд░ рд╕рд┐рдВрдмрд▓рд┐рдВрдХреНрд╕ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдпрджрд┐ рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░реЛрд╕реЗрд╕ рдХрд╛ рд▓рдХреНрд╖реНрдп рдлрд╝рд╛рдЗрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрд▓рдЧ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╕реНрддрд░ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рдЕрд▓рд░реНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рд╕рд┐рдВрдмрд▓рд┐рдВрдХреНрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмреНрд▓реЙрдХ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рд▓рд┐рдВрдХ рдХреЗ рдЧрдВрддрд╡реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реЛрддреАред рдпрд╣ Apple рдХреЗ EndpointSecurity рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдПрдХ рд╕реАрдорд╛ рд╣реИред
рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдХреЙрд▓
рдЗрд╕ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ task_name_for_pid
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдХреЛрдб рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдФрд░ рдлрд┐рд░ рдЙрд╕ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╡рд╣реА uid рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдкреНрд░реЛрд╕реЗрд╕ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ рдпрд╛ root (рдФрд░ рдпрд╣ рдкреНрд░реЛрд╕реЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдХреЛрдб рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ)ред
References