macOS IPC - Inter Process Communication
рдкреЛрд░реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Mach рд╕рдВрджреЗрд╢
рдореМрд▓рд┐рдХ рдЬрд╛рдирдХрд╛рд░реА
Mach рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрд╕рд╛рдзрди рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЫреЛрдЯреА рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдореЗрдВ рдХрдИ рдзрд╛рдЧреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпреЗ рдХрд╛рд░реНрдп рдФрд░ рдзрд╛рдЧреЗ 1:1 рдореИрдк рдХрд┐рдП рдЧрдП рд╣реИрдВ POSIX рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдзрд╛рдЧреЛрдВ рдХреЗ рд╕рд╛рдеред
рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ Mach рдЗрдВрдЯрд░-рдкреНрд░реЛрд╕реЗрд╕ рдХрдореНрдпреВрдирд┐рдХреЗрд╢рди (IPC) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ-рддрд░рдлрд╛ рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╕рдВрджреЗрд╢ рдкреЛрд░реНрдЯреЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд░реНрдиреЗрд▓ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рд╕рдВрджреЗрд╢ рдХрддрд╛рд░реЛрдВ рдХреА рддрд░рд╣ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред
рдкреЛрд░реНрдЯ Mach IPC рдХрд╛ рдореМрд▓рд┐рдХ рддрддреНрд╡ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкрд╛рд╕ рдПрдХ IPC рддрд╛рд▓рд┐рдХрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ mach рдкреЛрд░реНрдЯ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдЪ рдкреЛрд░реНрдЯ рдХрд╛ рдирд╛рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ (рдХрд░реНрдиреЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░)ред
рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рдкреЛрд░реНрдЯ рдирд╛рдо рдХреЛ рдХреБрдЫ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдп рдХреЛ рднреЗрдЬ рд╕рдХрддреА рд╣реИ рдФрд░ рдХрд░реНрдиреЗрд▓ рдЗрд╕реЗ рджреВрд╕рд░реЗ рдХрд╛рд░реНрдп рдХреА IPC рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЗрд╕ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рджрд┐рдЦрд╛рдПрдЧрд╛ред
рдкреЛрд░реНрдЯ рдЕрдзрд┐рдХрд╛рд░
рдкреЛрд░реНрдЯ рдЕрдзрд┐рдХрд╛рд░, рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдХрд╛рд░реНрдп рдХрд┐рд╕ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред рд╕рдВрднрд╛рд╡рд┐рдд рдкреЛрд░реНрдЯ рдЕрдзрд┐рдХрд╛рд░ рд╣реИрдВ (рдпрд╣рд╛рдБ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ):
рдкреНрд░рд╛рдкреНрддрд┐ рдЕрдзрд┐рдХрд╛рд░, рдЬреЛ рдкреЛрд░реНрдЯ рдХреЛ рднреЗрдЬреЗ рдЧрдП рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред Mach рдкреЛрд░реНрдЯ MPSC (рдПрдХрд╛рдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ, рдПрдХрд▓-рдЙрдкрднреЛрдХреНрддрд╛) рдХрддрд╛рд░реЗрдВ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╣рд░ рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рд╛рдкреНрддрд┐ рдЕрдзрд┐рдХрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдХрд┐ рдкрд╛рдЗрдкреНрд╕ рдореЗрдВ, рдЬрд╣рд╛рдВ рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╕рднреА рдПрдХ рдкрд╛рдЗрдк рдХреЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░реНрд╕ рдХреЛ рдзрд╛рд░рдг рдХрд░ рд╕рдХрддреА рд╣реИрдВ)ред
рдкреНрд░рд╛рдкреНрддрд┐ рдЕрдзрд┐рдХрд╛рд░ рд╡рд╛рд▓рд╛ рдПрдХ рдХрд╛рд░реНрдп рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рднреЗрдЬрдиреЗ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрд╕реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдкреЛрд░реНрдЯ рдкрд░ рдкреНрд░рд╛рдкреНрддрд┐ рдЕрдзрд┐рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИред
рдЕрдЧрд░ рдкреНрд░рд╛рдкреНрддрд┐ рдЕрдзрд┐рдХрд╛рд░ рдХрд╛ рдорд╛рд▓рд┐рдХ рдорд░ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдЙрд╕реЗ рдорд╛рд░ рджреЗрддрд╛ рд╣реИ, рддреЛ рднреЗрдЬрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рдЕрдирд░реНрдердХ (рдорд░рд╛ рдирд╛рдо) рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рднреЗрдЬрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░, рдЬреЛ рдкреЛрд░реНрдЯ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рднреЗрдЬрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рднреЗрдЬрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдХрд╛рд░реНрдп рдЕрдзрд┐рдХрд╛рд░ рдХреЛ рдХреНрд▓реЛрди рдХрд░ рд╕рдХреЗ рдФрд░ рдЗрд╕реЗ рддреАрд╕рд░реЗ рдХрд╛рд░реНрдп рдХреЛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХреЗред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреЛрд░реНрдЯ рдЕрдзрд┐рдХрд╛рд░ Mac рд╕рдВрджреЗрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдмрд╛рд░ рднреЗрдЬрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░, рдЬреЛ рдкреЛрд░реНрдЯ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдЕрдзрд┐рдХрд╛рд░ рдХреНрд▓реЛрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкреЛрд░реНрдЯ рд╕реЗрдЯ рдЕрдзрд┐рдХрд╛рд░, рдЬреЛ рдПрдХ рдкреЛрд░реНрдЯ рд╕реЗрдЯ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдмрд▓реНрдХрд┐ рдПрдХ рдПрдХрд▓ рдкреЛрд░реНрдЯред рдкреЛрд░реНрдЯ рд╕реЗрдЯ рд╕реЗ рд╕рдВрджреЗрд╢ рдХреЛ рдбреАрдХреНрдпреВ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ рдЙрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдкреЛрд░реНрдЯреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рд╕рдВрджреЗрд╢ рдХреЛ рдбреАрдХреНрдпреВ рдХрд░рддрд╛ рд╣реИред рдкреЛрд░реНрдЯ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдкреЛрд░реНрдЯреЛрдВ рдкрд░ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, Unix рдореЗрдВ
select
/poll
/epoll
/kqueue
рдХреА рддрд░рд╣редрдорд░рд╛ рдирд╛рдо, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдкреЛрд░реНрдЯ рдЕрдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рд╣реИред рдЬрдм рдПрдХ рдкреЛрд░реНрдЯ рдирд╖реНрдЯ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкреЛрд░реНрдЯ рдХреЗ рд╕рднреА рдореМрдЬреВрджрд╛ рдкреЛрд░реНрдЯ рдЕрдзрд┐рдХрд╛рд░ рдорд░реЗ рдирд╛рдо рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдп SEND рдЕрдзрд┐рдХрд╛рд░ рдХреЛ рджреВрд╕рд░реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╕рдВрджреЗрд╢ рд╡рд╛рдкрд╕ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред SEND рдЕрдзрд┐рдХрд╛рд░ рдХреЛ рдХреНрд▓реЛрди рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рдПрдХ рдЕрдзрд┐рдХрд╛рд░ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рддреАрд╕рд░реЗ рдХрд╛рд░реНрдп рдХреЛ рджреЗ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде, рдПрдХ рдордзреНрдпрд╕реНрде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬрд┐рд╕реЗ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдкреНрд░рднрд╛рд╡реА рд╕рдВрдЪрд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдлрд╛рдЗрд▓ рдкреЛрд░реНрдЯ
рдлрд╛рдЗрд▓ рдкреЛрд░реНрдЯ рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░реНрд╕ рдХреЛ Mac рдкреЛрд░реНрдЯ рдореЗрдВ рдмрдВрдзрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ (Mach рдкреЛрд░реНрдЯ рдЕрдзрд┐рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред fileport_makeport
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджрд┐рдП рдЧрдП FD рд╕реЗ fileport
рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ fileport_makefd
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╛рдЗрд▓рдкреЛрд░реНрдЯ рд╕реЗ рдПрдХ FD рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рд╕рдВрдЪрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛
рдкрд╣рд▓реЗ рд╕реЗ рдХрд┐рд╕реА рдЕрдзрд┐рдХрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЕрдзрд┐рдХрд╛рд░ рднреЗрдЬрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реА рд╕рдВрдЪрд╛рд░ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ?
рдЗрд╕рдХреЗ рд▓рд┐рдП, рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд╕рд░реНрд╡рд░ (рдореИрдХ рдореЗрдВ рд▓реЙрдиреНрдЪрдбреА рд╣реИ) рд╢рд╛рдорд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдХреЛрдИ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рд░ рдорд╛рдВрдЧ рд╕рдХрддреЗ рд╣реИрдВ:
рдХрд╛рд░реНрдп A рдПрдХ рдирдпрд╛ рдкреЛрд░реНрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдкреНрд░рд╛рдкреНрддрд┐ рдЕрдзрд┐рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИред
рдХрд╛рд░реНрдп A, рдкреНрд░рд╛рдкреНрддрд┐ рдЕрдзрд┐рдХрд╛рд░ рдХреЗ рдзрд╛рд░рдХ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рднреЗрдЬрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
рдХрд╛рд░реНрдп A рдмреВрдЯ
рдПрдХ Mach рд╕рдВрджреЗрд╢
рдпрд╣рд╛рдБ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкрд╛рдПрдВ
mach_msg
рдлрд╝рдВрдХреНрд╢рди, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд╣реИ, Mach рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрджреЗрд╢ рдХреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреЛ mach_msg_header_t
рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдЖрд░рдВрдн рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрджреЗрд╢ рд╕рд╛рдордЧреНрд░реА рд╣реЛрддреА рд╣реИред рд╕рдВрд░рдЪрдирд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ:
рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд╛рдкреНрддрд┐ рдЕрдзрд┐рдХрд╛рд░ рд╣реИрдВ, рд╡реЗ Mach рдкреЛрд░реНрдЯ рдкрд░ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреА рд╣реИрдВред рдЙрд▓реНрдЯреЗ, рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдПрдХ рднреЗрдЬрдиреЗ рдпрд╛ рдПрдХ рдмрд╛рд░ рднреЗрдЬрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рднреЗрдЬрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдЕрдорд╛рдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдлрд╝реАрд▓реНрдб msgh_bits
рдПрдХ рдмрд┐рдЯрдореИрдк рд╣реИ:
рдкрд╣рд▓рд╛ рдмрд┐рдЯ (рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг) рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рдВрджреЗрд╢ рдЬрдЯрд┐рд▓ рд╣реИ (рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗ рдЕрдзрд┐рдХ)
рддреАрд╕рд░рд╛ рдФрд░ рдЪреМрдерд╛ рдХрд░реНрдиреЗрд▓ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рджреВрд╕рд░реЗ рдмрд╛рдЗрдЯ рдХреЗ 5 рд╕рдмрд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╛рдЙрдЪрд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдПрдХ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреЛрд░реНрдЯ рдХреБрдВрдЬреА/рдорд╛рди рд╕рдВрдпреЛрдЬрди рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдПред
рддреАрд╕рд░реЗ рдмрд╛рдЗрдЯ рдХреЗ 5 рд╕рдмрд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдерд╛рдиреАрдп рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдЪреМрдереЗ рдмрд╛рдЗрдЯ рдХреЗ 5 рд╕рдмрд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рджреВрд░рд╕реНрде рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рд╡рд╛рдЙрдЪрд░, рд╕реНрдерд╛рдиреАрдп рдФрд░ рджреВрд░рд╕реНрде рдкреЛрд░реНрдЯ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ (рд╕реЗ mach/message.h):
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, MACH_MSG_TYPE_MAKE_SEND_ONCE
рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХ-рдмрд╛рд░-рднреЗрдЬреЗрдВ рдЕрдзрд┐рдХрд╛рд░ рдХреЛ рдЙрддреНрдкрдиреНрди рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реЗ MACH_PORT_NULL
рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рди рд╣реЛред
рдПрдХ рд╕рд░рд▓ рджреНрд╡рд┐рджрд┐рд╢реАрдп рд╕рдВрдЪрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдорд╢реАрди рд╕рдВрджреЗрд╢ рд╣реЗрдбрд░ рдореЗрдВ рдПрдХ рдЙрддреНрддрд░ рдкреЛрд░реНрдЯ (msgh_local_port
) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреА рд╣реИ рдЬрд╣рд╛рдВ рд╕рдВрджреЗрд╢ рдХрд╛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдЗрд╕ рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрддреНрддрд░ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рджреНрд╡рд┐рджрд┐рд╢реАрдп рд╕рдВрдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХреНрд╕рдкреАрд╕реА рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЙрдореНрдореАрдж рд░рдЦрддреЗ рд╣реИрдВ (xpc_connection_send_message_with_reply
рдФрд░ xpc_connection_send_message_with_reply_sync
)ред рд▓реЗрдХрд┐рди рдЖрдо рддреМрд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдкреЛрд░реНрдЯ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдкрд╣рд▓реЗ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рджреНрд╡рд┐рджрд┐рд╢реАрдп рд╕рдВрдЪрд╛рд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рд╕рдВрджреЗрд╢ рд╣реЗрдбрд░ рдХреЗ рдЕрдиреНрдп рдлрд╝реАрд▓реНрдб рд╣реИрдВ:
msgh_size
: рдкреВрд░реЗ рдкреИрдХреЗрдЯ рдХрд╛ рдЖрдХрд╛рд░редmsgh_remote_port
: рдЬрд┐рд╕ рдкреЛрд░реНрдЯ рдкрд░ рдпрд╣ рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИредmsgh_voucher_port
: рдорд╢ рд╡рд╛рдЙрдЪрд░редmsgh_id
: рдЗрд╕ рд╕рдВрджреЗрд╢ рдХрд╛ рдЖрдИрдбреА, рдЬрд┐рд╕реЗ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдорд╢ рд╕рдВрджреЗрд╢ рдПрдХ рдорд╢ рдкреЛрд░реНрдЯ
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдорд╢ рдХрд░реНрдирд▓ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рдПрдХрд▓ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛, рдПрдХрд╛рдзрд┐рдХ рднреЗрдЬрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рд╣реИред рдПрдХрд╛рдзрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдПрдХ рдорд╢ рдкреЛрд░реНрдЯ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рд╕рдордп рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕реЗ рдкрдврд╝ рд╕рдХрддреА рд╣реИред
рдЙрд╕рдХреЗ рдмрд╛рдж рд╕рдВрджреЗрд╢ mach_msg_header_t
рд╣реЗрдбрд░ рджреНрд╡рд╛рд░рд╛ рдФрд░ рдмреЙрдбреА рджреНрд╡рд╛рд░рд╛ рдФрд░ рдЯреНрд░реЗрд▓рд░ (рдпрджрд┐ рдХреЛрдИ) рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХрд░реНрдирд▓ рдХреЛ рд╕рд┐рд░реНрдл рдПрдХ рдХрд╛рд░реНрдп рд╕реЗ рджреВрд╕рд░реЗ рдХрд╛рд░реНрдп рддрдХ рд╕рдВрджреЗрд╢ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдПрдХ рдЯреНрд░реЗрд▓рд░ рдПрдХ рд╕рдВрджреЗрд╢ рдореЗрдВ рдХрд░реНрдирд▓ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА) рдЬрд┐рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрддрд┐ рдореЗрдВ рдлреНрд▓реИрдЧ MACH_RCV_TRAILER_<trailer_opt>
рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣рд╛рдВ рд╡рд┐рднрд┐рдиреНрди рдЬрд╛рдирдХрд╛рд░реА рдЕрдиреБрд░реЛрдз рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ)ред
рдЬрдЯрд┐рд▓ рд╕рдВрджреЗрд╢
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдиреНрдп рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдВрджреЗрд╢ рд╣реИрдВ, рдЬреИрд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреЛрд░реНрдЯ рдЕрдзрд┐рдХрд╛рд░ рдпрд╛ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдкрд╛рд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ, рдЬрд╣рд╛рдВ рдХрд░реНрдирд▓ рдХреЛ рднреА рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЛ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реЗрдбрд░ msgh_bits
рдХрд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд░реНрдгрди mach/message.h
рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВ:
Mac Ports APIs
рдиреЛрдЯ рдХрд░реЗрдВ рдХрд┐ рдкреЛрд░реНрдЯреНрд╕ рдХреЛ рдЯрд╛рд╕реНрдХ рдиреЗрдорд╕реНрдкреЗрд╕ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреЛрд░реНрдЯ рдмрдирд╛рдиреЗ рдпрд╛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЯрд╛рд╕реНрдХ рдиреЗрдорд╕реНрдкреЗрд╕ рднреА рдХреНрд╡реЗрд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА mach/mach_port.h
рдореЗрдВ):
mach_port_allocate
|mach_port_construct
: рдПрдХ рдкреЛрд░реНрдЯ рдмрдирд╛рдПрдВредmach_port_allocate
рдПрдХ рдкреЛрд░реНрдЯ рд╕реЗрдЯ рднреА рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ: рдПрдХ рд╕рдореВрд╣ рдХреЗ рдкреЛрд░реНрдЯреНрд╕ рдкрд░ рдкреНрд░рд╛рдкреНрддрд┐ рдЕрдзрд┐рдХрд╛рд░ред рдЬрдм рднреА рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдореЗрдВ рд╕рдВрдХреЗрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ рдХрд┐рд╕ рдкреЛрд░реНрдЯ рд╕реЗ рдЖрдпрд╛ рдерд╛редmach_port_allocate_name
: рдкреЛрд░реНрдЯ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 32 рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ)mach_port_names
: рдПрдХ рд▓рдХреНрд╖реНрдп рд╕реЗ рдкреЛрд░реНрдЯ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВmach_port_type
: рдПрдХ рдирд╛рдо рдкрд░ рдЯрд╛рд╕реНрдХ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВmach_port_rename
: рдПрдХ рдкреЛрд░реНрдЯ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ (рдЬреИрд╕реЗ FDs рдХреЗ рд▓рд┐рдП dup2)mach_port_allocate
: рдПрдХ рдирдпрд╛ рдкреНрд░рд╛рдкреНрддрд┐, рдкреЛрд░реНрдЯ рд╕реЗрдЯ рдпрд╛ DEAD_NAME рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВmach_port_insert_right
: рдЙрд╕ рдкреЛрд░реНрдЯ рдореЗрдВ рдПрдХ рдирдпрд╛ рдЕрдзрд┐рдХрд╛рд░ рдмрдирд╛рдПрдВ рдЬрд┐рд╕ рдкрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рд╛рдкреНрддрд┐ рд╣реИmach_port_...
mach_msg
|mach_msg_overwrite
: mach рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рдиред рдУрд╡рд░рд░рд╛рдЗрдЯ рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рд╡рд┐рднрд┐рдиреНрди рдмрдлрд╝рд░ рдХреЛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рджреВрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕реЗ рдмрд╕ рдкреБрдирдГ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛)ред
Debug mach_msg
рдЬреИрд╕реЗ рд╣реА рдлрд╝рдВрдХреНрд╢рди mach_msg
рдФрд░ mach_msg_overwrite
рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрди рдкрд░ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рднреЗрдЬреЗ рдЧрдП рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдбреАрдмрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ libSystem.B
рд▓реЛрдб рдХрд░реЗрдЧрд╛ рдЬреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
рд╡рд┐рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рд╕реЗ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
рдореИрд╕реЗрдЬ рд╣реЗрдбрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдФрд░ рдкрд╣рд▓реЗ рдЖрд░реНрдЧреНрдпреВрдореЗрдВрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ:
рдРрд╕реЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ mach_msg_bits_t
рдПрдХ рдЙрддреНрддрд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдп рд╣реИред
рджреНрд╡рд╛рд░реЛрдВ рдХреА рдЧрдгрдирд╛
рдирд╛рдо рдкреЛрд░реНрдЯ рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╛рдо рд╣реИ (рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдкрд╣рд▓реЗ 3 рдмрд╛рдЗрдЯ рдореЗрдВ рдХреИрд╕реЗ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ)ред ipc-object
рдкреЛрд░реНрдЯ рдХреА рдЕрд╡рд┐рд╡рд╛рджрд┐рдд рдЕрджреНрд╡рд┐рддреАрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреЗрд╡рд▓ send
рдЕрдзрд┐рдХрд╛рд░ рд╡рд╛рд▓реЗ рдкреЛрд░реНрдЯ рдХреЗ рд╕реНрд╡рд╛рдореА рдХреА рдкрд╣рдЪрд╛рди рдХреИрд╕реЗ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ (рдкреЛрд░реНрдЯ рдирд╛рдо + pid)ред рдпрд╣рд╛рдБ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ +
рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕реА рдкреЛрд░реНрдЯ рд╕реЗ рдЬреБрдбрд╝реЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
procesxp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рдкрдВрдЬреАрдХреГрдд рд╕реЗрд╡рд╛ рдирд╛рдореЛрдВ (SIP рдЕрдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг com.apple.system-task-port
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░) рджреЗрдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ:
рдЖрдк рдЗрд╕ рдЯреВрд▓ рдХреЛ iOS рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕реЗ http://newosxbook.com/tools/binpack64-256.tar.gz рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдХреЗред
рдХреЛрдб рдЙрджрд╛рд╣рд░рдг
рдиреЛрдЯ рдХрд░реЗрдВ рдХрд┐ рднреЗрдЬрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдкреЛрд░реНрдЯ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ, org.darlinghq.example
рдирд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рднреЗрдЬрдиреЗ рдХрд╛ рд╣рдХ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рднреЗрдЬрдиреЗ рд╡рд╛рд▓рд╛ рдЙрд╕ рдирд╛рдо рдХреЗ рднреЗрдЬрдиреЗ рдХрд╛ рд╣рдХ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред
рд╡рд┐рд╢реЗрд╖ рдмрдВрджрд░рдЧрд╛рд╣
рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдмрдВрджрд░рдЧрд╛рд╣ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреБрдЫ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдпрд╛ рдХреБрдЫ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдпрджрд┐ рдЙрди рдкрд░ SEND рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╣реЛред рдЗрд╕рд╕реЗ рдЗрди рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЛ рд╣рдорд▓рд╛рд╡рд░ рдХреА рджреГрд╖реНрдЯрд┐ рд╕реЗ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдмрдирд╛рддрд╛ рд╣реИ рди рдХреЗрд╡рд▓ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдмрд▓реНрдХрд┐ рдЗрд╕рд▓рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ SEND рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореЗрдЬрдмрд╛рди рд╡рд┐рд╢реЗрд╖ рдмрдВрджрд░рдЧрд╛рд╣
рдпреЗ рдмрдВрджрд░рдЧрд╛рд╣ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
SEND рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП host_get_special_port
рдХреЛ рдмреБрд▓рд╛рдХрд░ рдФрд░ RECEIVE рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдмреБрд▓рд╛рдХрд░ host_set_special_port
рдХреЛ рдмреБрд▓рд╛рдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рджреЛрдиреЛрдВ рдХреЙрд▓реНрд╕ рдХреЛ host_priv
рдмрдВрджрд░рдЧрд╛рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЛ рдХреЗрд╡рд▓ рд░реВрдЯ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдкрд┐рдЫрд▓реЗ рдореЗрдВ рд░реВрдЯ рдХреЛ host_set_special_port
рдмреБрд▓рд╛рдиреЗ рдФрд░ рдЕрд╡рд╢реЗрд╖ рдХреЛ рд╣рд╛рдЗрдЬреИрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдереА рдЬрд┐рд╕рд╕реЗ рдХреЛрдб рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЛ рдЙрд▓рдЯрд╛ рд╕рдХрддрд╛ рдерд╛ рдЬреИрд╕реЗ HOST_KEXTD_PORT
рдХреЛ рд╣рд╛рдЗрдЬреИрдХ рдХрд░рдХреЗ (SIP рдЕрдм рдЗрд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ)ред
рдпреЗ 2 рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИрдВ: рдкрд╣рд▓реЗ 7 рдмрдВрджрд░рдЧрд╛рд╣ рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдореЗрдВ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ 1 HOST_PORT
, 2 HOST_PRIV_PORT
, 3 HOST_IO_MASTER_PORT
рдФрд░ 7 HOST_MAX_SPECIAL_KERNEL_PORT
рд╣реИрдВред
8 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╡реЗ рд╕рд┐рд╕реНрдЯрдо рдбреЗрдордиреНрд╕ рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдореЗрдВ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ host_special_ports.h
рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореЗрдЬрдмрд╛рди рдмрдВрджрд░рдЧрд╛рд╣: рдпрджрд┐ рдХрд┐рд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдмрдВрджрд░рдЧрд╛рд╣ рдкрд░ SEND рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╣реИрдВ рддреЛ рд╡рд╣ рдЗрд╕рдХреЗ рд░реВрдЯреАрди рдХреЛ рдмреБрд▓рд╛рдХрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреА рд╣реИ рдЬреИрд╕реЗ:
host_processor_info
: рдкреНрд░реЛрд╕реЗрд╕рд░ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВhost_info
: рдореЗрдЬрдмрд╛рди рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВhost_virtual_physical_table_info
: рд╡рд░реНрдЪреБрдЕрд▓/рдлрд┐рдЬрд┐рдХрд▓ рдкреЗрдЬ рдЯреЗрдмрд▓ (MACH_VMDEBUG рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)host_statistics
: рдореЗрдЬрдмрд╛рди рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВmach_memory_info
: рдХрд░реНрдиреЗрд▓ рдореЗрдореЛрд░реА рд▓реЗрдЖрдЙрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдореЗрдЬрдмрд╛рди рдирд┐рдЬреА рдмрдВрджрд░рдЧрд╛рд╣: рдЗрд╕ рдмрдВрджрд░рдЧрд╛рд╣ рдкрд░ SEND рдЕрдзрд┐рдХрд╛рд░ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░ рд╕рдХрддреА рд╣реИ рдЬреИрд╕реЗ рдмреВрдЯ рдбреЗрдЯрд╛ рджрд┐рдЦрд╛рдирд╛ рдпрд╛ рдХрд░реНрдиреЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░реВрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЗрд╕ рдЕрдиреБрдорддрд┐ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд,
kext_request
API рдХреЛ рдмреБрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп entitlementscom.apple.private.kext*
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ Apple binaries рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдЕрдиреНрдп рд░реВрдЯреАрди рдЬреЛ рдмреБрд▓рд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
host_get_boot_info
:machine_boot_info()
рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВhost_priv_statistics
: рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реА рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВvm_allocate_cpm
: рдПрдХрд╕рдВрдШрдЯрд┐рдд рдлрд┐рдЬрд┐рдХрд▓ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВhost_processors
: рдореЗрдЬрдмрд╛рди рдкреНрд░реЛрд╕реЗрд╕рд░реНрд╕ рдХреЛ рднреЗрдЬреЗрдВmach_vm_wire
: рдореЗрдореЛрд░реА рдХреЛ рд░рд╣рдиреЗ рд╡рд╛рд▓рд╛ рдмрдирд╛рдПрдВрдХреНрдпреЛрдВрдХрд┐ рд░реВрдЯ рдЗрд╕ рдЕрдиреБрдорддрд┐ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣
host_set_[special/exception]_port[s]
рдХреЛ рдмреБрд▓рд╛рдХрд░ рдореЗрдЬрдмрд╛рди рд╡рд┐рд╢реЗрд╖ рдпрд╛ рдЕрд╡рд╢реЗрд╖ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЛ рд╣рд╛рдЗрдЬреИрдХ рдХрд░реЗрдВред
рдЗрди рд╕рднреА рдореЗрдЬрдмрд╛рди рд╡рд┐рд╢реЗрд╖ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдХрд░:
рдХрд╛рд░реНрдп рд╡рд┐рд╢реЗрд╖ рдкреЛрд░реНрдЯ
рдпреЗ рдкреЛрд░реНрдЯ рд╡рд┐рд╢реЗрд╖ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рд╣реИрдВред рдЗрдиреНрд╣реЗрдВ task_[get/set]_special_port
рдХреЛ рдмреБрд▓рд╛рдХрд░ рдкреНрд░рд╛рдкреНрдд/рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрдиреНрд╣реЗрдВ task_special_ports.h
рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
From here:
TASK_KERNEL_PORT[task-self send right]: рдпрд╣ рдкреЛрд░реНрдЯ рдЗрд╕ рдЯрд╛рд╕реНрдХ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдореИрд╕реЗрдЬреЗрд╕ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЗрд╕ рдЯрд╛рд╕реНрдХ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдкреЛрд░реНрдЯ mach_task_self (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ Task Ports) рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
TASK_BOOTSTRAP_PORT[bootstrap send right]: рдЯрд╛рд╕реНрдХ рдХрд╛ bootstrap рдкреЛрд░реНрдЯред рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЕрдиреНрдп рд╕рд┐рд╕реНрдЯрдо рд╕реЗрд╡рд╛ рдкреЛрд░реНрдЯ рдХреА рд╡рд╛рдкрд╕реА рдХреЗ рд▓рд┐рдП рдореИрд╕реЗрдЬреЗрд╕ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдПред
TASK_HOST_NAME_PORT[host-self send right]: рдЗрд╕рдореЗрдВ рдЖрд╡рд╛рд╕реА рдЖрд╡рд╛рдЬ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкреЛрд░реНрдЯ mach_host_self рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
TASK_WIRED_LEDGER_PORT[ledger send right]: рдЗрд╕ рдЯрд╛рд╕реНрдХ рдХреЛ рдЙрд╕рдХреА рд╡рд╛рдпрд░реНрдб рдХрд░реНрдиреЗрд▓ рдореЗрдореЛрд░реА рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХрд╛ рдирд╛рдордХрд░рдг рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкреЛрд░реНрдЯред
TASK_PAGED_LEDGER_PORT[ledger send right]: рдЗрд╕ рдЯрд╛рд╕реНрдХ рдХреЛ рдЙрд╕рдХреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореЗрдореЛрд░реА рдореИрдиреЗрдЬреНрдб рдореЗрдореЛрд░реА рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХрд╛ рдирд╛рдордХрд░рдг рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкреЛрд░реНрдЯред
Task Ports
рдореВрд▓ рд░реВрдк рд╕реЗ Mach рдореЗрдВ "рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ" рдирд╣реАрдВ рдереАрдВ, рдЙрд╕рдореЗрдВ "рдЯрд╛рд╕реНрдХ" рдерд╛ рдЬрд┐рд╕реЗ рдзрд╛рдЧреЛрдВ рдХреЗ рдПрдХ рдбрд┐рдмреНрдмреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдзрд┐рдХ рдорд╛рдирд╛ рдЧрдпрд╛ рдерд╛ред рдЬрдм Mach рдХреЛ BSD рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдпрд╛ рдЧрдпрд╛ рддреЛ рд╣рд░ рдЯрд╛рд╕реНрдХ рдХреЛ рдПрдХ BSD рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рдирд╛ рдЧрдпрд╛ред рдЗрд╕рд▓рд┐рдП рд╣рд░ BSD рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкрд╛рд╕ рдЙрд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╡рд░рдг рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╣рд░ Mach рдЯрд╛рд╕реНрдХ рдХреЗ рднреА рдЕрдкрдиреЗ рдЕрдВрджрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ (рдХреЗрд╡рд▓ рдЕрд╕реНрдерд┐рддрд┐рдЧреНрд░рд╕реНрдд pid 0 рдХреЗ рд▓рд┐рдП рдЬреЛ kernel_task
рд╣реИ рдХреЗ рд▓рд┐рдП).
рдЗрд╕рдХреЗ рд╕рд╛рде рджреЛ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВ:
task_for_pid(target_task_port, pid, &task_port_of_pid)
: рдирд┐рд░реНрджрд┐рд╖реНрдЯpid
рджреНрд╡рд╛рд░рд╛ рд╕рдВрдмрдВрдзрд┐рдд рдЯрд╛рд╕реНрдХ рдХреЗ рд▓рд┐рдП рдЯрд╛рд╕реНрдХ рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ SEND рд░рд╛рдЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯtarget_task_port
рдХреЛ рджреЗрдВ (рдЬреЛ рд╕рд╛рдорд╛рдиреНрдпрдд: рдХреЙрд▓рд░ рдЯрд╛рд╕реНрдХ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗmach_task_self()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рдЯрд╛рд╕реНрдХ рдкрд░ рдПрдХ SEND рдкреЛрд░реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред)pid_for_task(task, &pid)
: рдПрдХ рдЯрд╛рд╕реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ SEND рд░рд╛рдЗрдЯ рдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛, рдЗрд╕ рдЯрд╛рд╕реНрдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд PID рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВред
рдЯрд╛рд╕реНрдХ рдХреЗ рднреАрддрд░ рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯрд╛рд╕реНрдХ рдХреЛ рдЕрдкрдиреЗ рдЖрдк рдХреЗ рд▓рд┐рдП SEND
рд░рд╛рдЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдЬреЛ mach_task_self()
рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рдереА (рдЬреЛ task_self_trap
(28) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред рдЗрд╕ рдЕрдиреБрдорддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдЯрд╛рд╕реНрдХ рдХрдИ рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ:
task_threads
: рдЯрд╛рд╕реНрдХ рдХреЗ рд╕рднреА рдзрд╛рдЧреЛрдВ рдХреЗ рд▓рд┐рдП SEND рд░рд╛рдЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВtask_info
: рдЯрд╛рд╕реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВtask_suspend/resume
: рдПрдХ рдЯрд╛рд╕реНрдХ рдХреЛ рд░реЛрдХреЗрдВ рдпрд╛ рдлрд┐рд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВtask_[get/set]_special_port
thread_create
: рдПрдХ рдзрд╛рдЧрд╛ рдмрдирд╛рдПрдВtask_[get/set]_state
: рдЯрд╛рд╕реНрдХ рд╕реНрдерд┐рддрд┐ рдирд┐рдпрдВрддреНрд░рдг рдХрд░реЗрдВрдФрд░ рдЕрдзрд┐рдХ mach/task.h рдореЗрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдХ рдЕрд▓рдЧ рдЯрд╛рд╕реНрдХ рдХреЗ рдЯрд╛рд╕реНрдХ рдкреЛрд░реНрдЯ рдкрд░ рдПрдХ SEND рд░рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде, рдПрдХ рдЕрд▓рдЧ рдЯрд╛рд╕реНрдХ рдкрд░ рдРрд╕реА рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЯрд╛рд╕реНрдХ_рдкреЛрд░реНрдЯ рднреА vm_map
рдкреЛрд░реНрдЯ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдПрдХ рдЯрд╛рд╕реНрдХ рдХреЗ рднреАрддрд░ рдореЗрдореЛрд░реА рдкрдврд╝рдиреЗ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрддреА рд╣реИ рдЬреИрд╕реЗ vm_read()
рдФрд░ vm_write()
рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рдеред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдЯрд╛рд╕реНрдХ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрд▓рдЧ рдЯрд╛рд╕реНрдХ рдХреЗ рдЯрд╛рд╕реНрдХ_рдкреЛрд░реНрдЯ рдкрд░ SEND рд░рд╛рдЗрдЯ рд╣реИ, рдЙрд╕ рдЯрд╛рд╕реНрдХ рдореЗрдВ рдХреЛрдб рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред
рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдХреНрдпреЛрдВрдХрд┐ рдХрд░реНрдиреЗрд▓ рднреА рдПрдХ рдЯрд╛рд╕реНрдХ рд╣реИ, рдЕрдЧрд░ рдХреЛрдИ SEND рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓реЗрддрд╛ рд╣реИ kernel_task
рдкрд░, рддреЛ рд╡рд╣ рдХрд░реНрдиреЗрд▓ рдХреЛ рдХреБрдЫ рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрдЧреА (рдЬреЗрд▓рдмреНрд░реЗрдХреНрд╕).
mach_task_self()
рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░реЗрдВ рдХреЙрд▓рд░ рдЯрд╛рд╕реНрдХ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдкреЛрд░реНрдЯ рдХреЗрд╡рд▓exec()
рдХреЗ рдЕрд╡рд░реЛрдз рдХреЗ рдмрд╛рд╣рд░ рд╡рд┐рд░рд╛рд╕рдд рд╣реИ;fork()
рдХреЗ рд╕рд╛рде рдирдИ рдЯрд╛рд╕реНрдХ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ (рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдЯрд╛рд╕реНрдХ рдХреЛexec()
рдХреЗ рдмрд╛рдж рднреА рдПрдХ рдирдпрд╛ рдЯрд╛рд╕реНрдХ рдкреЛрд░реНрдЯ рдорд┐рд▓рддрд╛ рд╣реИред) рдЯрд╛рд╕реНрдХ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХрд╛ рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ "рдкреЛрд░реНрдЯ рд╕реНрд╡реИрдк рдиреГрддреНрдп" рдХрд░рддреЗ рд╕рдордпfork()
рдХрд░рддреЗ рд╕рдордпредрдЗрд╕ рдкреЛрд░реНрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдкреНрд░рддрд┐рдмрдВрдзрд╛рдПрдБ (рдмрд╛рдЗрдирд░реА
AppleMobileFileIntegrity
рд╕реЗmacos_task_policy
рд╕реЗ):рдпрджрд┐ рдРрдк рдХреЗ рдкрд╛рд╕
com.apple.security.get-task-allow
entitlement рд╣реИ рддреЛ рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рд╕рдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдЯрд╛рд╕реНрдХ рдкреЛрд░реНрдЯ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреА рд╣реИрдВ (рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП Xcode рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдорд╛рдиреНрдпрдд: рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдиреЛрдЯрд░рд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕реЗ рдЙрддреНрдкрд╛рджрди рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЕрдиреБрдорддрд┐ рджреЗрдЧреАредcom.apple.system-task-ports
entitlement рд╡рд╛рд▓реЗ рдРрдкреНрд╕ рдХрд┐рд╕реА рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЯрд╛рд╕реНрдХ рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдХрд░реНрдиреЗрд▓ рдХреЛ рдирд╣реАрдВред рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЗрд╕реЗtask_for_pid-allow
рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред рдпрд╣ рдХреЗрд╡рд▓ Apple рдПрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рдХреЛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрд░реВрдЯ рдРрдкреНрд╕ рдПрдХ рд╣рд╛рд░реНрдбрдиреНрдб рд░рдирдЯрд╛рдЗрдо рдХреЗ рд╕рд╛рде рдХрдВрдкрд╛рдЗрд▓ рдирд╣реАрдВ рдХреА рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЯрд╛рд╕реНрдХ рдкреЛрд░реНрдЯ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рди рдХреЗрд╡рд▓ Apple рд╕реЗ).
рдЯрд╛рд╕реНрдХ рдирд╛рдо рдкреЛрд░реНрдЯ: рдПрдХ рдЯрд╛рд╕реНрдХ рдкреЛрд░реНрдЯ рдХрд╛ рдПрдХ рдЕрдирдзрд┐рдХреГрдд рд╕рдВрд╕реНрдХрд░рдгред рдпрд╣ рдЯрд╛рд╕реНрдХ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ред рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рдПрдХрдорд╛рддреНрд░ рдЪреАрдЬ рд╣реИ task_info()
ред
Thread Ports
рдзрд╛рдЧреЛрдВ рдХреЗ рд╕рд╛рде рднреА рд╕рдВрдмрдВрдзрд┐рдд рдкреЛрд░реНрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдЯрд╛рд╕реНрдХ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ task_threads
рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде processor_set_threads
ред рдзрд╛рдЧреЗ рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ SEND рд░рд╛рдЗрдЯ рдереНрд░реЗрдб рдПрдХреНрдЯ рдЙрдкрдкреНрд░рдгрд╛рд▓реА рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ:
thread_terminate
thread_[get/set]_state
act_[get/set]_state
thread_[suspend/resume]
thread_info
...
рдХрд┐рд╕реА рднреА рдзрд╛рдЧреЗ рдХреЛ рдЗрд╕ рдкреЛрд░реНрдЯ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП mach_thread_sef
рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдзрд╛рдЧреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╢реЗрд▓рдХреЛрдб рдЗрдВрдЬреЗрдХреНрд╢рди рдЯрд╛рд╕реНрдХ рдкреЛрд░реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
рдЖрдк рдпрд╣рд╛рдВ рд╕реЗ рдПрдХ рд╢реЗрд▓рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
Introduction to ARM64v8{% рдЯреИрдм рд╢реАрд░реНрд╖рдХ="entitlements.plist" %}
рдХрдВрдкрд╛рдЗрд▓ рдХрд░реЗрдВ рдкрд┐рдЫрд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдФрд░ рдЕрдзрд┐рдХрд╛рд░ рдЬреЛрдбрд╝реЗрдВ рдХреЛрдб рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде (рдЕрдЧрд░ рдирд╣реАрдВ рддреЛ рдЖрдкрдХреЛ sudo рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛)ред