рдХрдЯрд░ рдХреЗ рдиреАрдЪреЗ M86usz Jurczyk рджреНрд╡рд╛рд░рд╛ X86 рдПрдореБрд▓реЗрд╢рди рдФрд░ рдЯреЗрдВрдЯ рдЯреНрд░реИрдХрд┐рдВрдЧ ( рдЖрд░реНрдЯрд┐рдХрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬрд╝реАрд░реЛ ) рдХреЗ рд╕рд╛рде рдХрд░реНрдиреЗрд▓ рдореЗрдореЛрд░реА рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрд╢рди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдЙрджреНрдШрд╛рдЯрди рднрд╛рдЧ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИред
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдЕрдиреБрд╡рд╛рджрд┐рдд рднрд╛рдЧ рдореЗрдВ:
- рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╡рд┐рд╢реЗрд╖рдг (рд╕реНрдореГрддрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рд╕рдорд╕реНрдпрд╛ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ)
- рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдЧреБрдард▓реА рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ (рд╕реНрдореГрддрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рд╕рдорд╕реНрдпрд╛ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ)
- рдХрд░реНрдиреЗрд▓ рдореЗрдореЛрд░реА рдкреНрд░рдХрдЯреАрдХрд░рдг рдХрд╛ рдорд╣рддреНрд╡ рдФрд░ OS рд╕реБрд░рдХреНрд╖рд╛ рдкрд░ рдкреНрд░рднрд╛рд╡
- рдХрд░реНрдиреЗрд▓ рдореЗрдореЛрд░реА рдХреЗ рдкреНрд░рдХрдЯреАрдХрд░рдг рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдЙрд╕рдХрд╛ рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рддрд░реАрдХреЗ рдФрд░ рддрдХрдиреАрдХ
рдпрджреНрдпрдкрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдУрдПрд╕ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реНрдиреЗрд▓ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХреЗ рддрдВрддреНрд░ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рд░ рд╡рд┐рднрд┐рдиреНрди рд╕реБрд░рдХреНрд╖рд╛ рдбреЛрдореЗрди рдХреЗ рдмреАрдЪ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рд╣рд╛рдЗрдкрд░рд╡рд╛рдЗрдЬрд░ рдЕрддрд┐рдерд┐ рдорд╢реАрди рд╣реИ, рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рд╕рд┐рд╕реНрдЯрдо рд╕реЗрд╡рд╛ (рдбреЗрдорди рдЬреАрдпреВрдЖрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ, рдиреЗрдЯрд╡рд░реНрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд░реНрд╡рд░ рд╣реИ, рдЖрджрд┐) ред

рдкрд░рд┐рдЪрдп
рдЖрдзреБрдирд┐рдХ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдУрдПрд╕ рдХреЗ рдХрд░реНрдиреЗрд▓ рдХреЗ рдмреАрдЪ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рдкреГрдердХреНрдХрд░рдг рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕рдореЗрдВ рдпрд╣ рддрдереНрдп рд╢рд╛рдорд┐рд▓ рд╣реИ рдХрд┐ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдкреНрд░рднрд╛рд╡ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдпрд╣ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗрд╡рд▓ рдЙрди рд╕реВрдЪрдирд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЙрдиреНрд╣реЗрдВ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рджреВрд╕рд░рд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд╕реА рднрд╛рд╖рд╛ (рдХрд░реНрдиреЗрд▓ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдореБрдЦреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛) рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рд╕реБрд░рдХреНрд╖рд╛ рдбреЛрдореЗрди рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рдж рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
X86 / x86-64 рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЖрдзреБрдирд┐рдХ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдорд▓реНрдЯреАрдЯреНрд░реНрд░реЗрдб рд╣реИрдВ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдореЛрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдХреНрд▓рд╛рдЗрдВрдЯ) рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рд╕рдВрд╕рд╛рдзрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЗрд░рд╛рджреЗ рд╕реЗ рдУрдПрд╕ рдХрд░реНрдиреЗрд▓ (рд╕рд░реНрд╡рд░) рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдХрд░реНрдиреЗрд▓ рдлрд╝рдВрдХреНрд╢рди (рд░рд┐рдВрдЧ 0) рдХреЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реЗрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рдХреЛрдб ( рд░рд┐рдВрдЧ 3 ) рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрдВрддреНрд░ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдпрд╛ (рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ) syscalls рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдгрд╛рд▓реА рдХреЙрд▓ рдЪрд┐рддреНрд░ 1 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдЪрд┐рддреНрд░ 1: рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЬреАрд╡рди рдЪрдХреНрд░ред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдореЛрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╕рдордп рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдХрд░реНрдиреЗрд▓ рдореЗрдореЛрд░реА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд▓реАрдХ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдХрд░реНрдиреЗрд▓ рдбреЗрдЯрд╛ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬреЛрдЦрд┐рдо рд╣реИред рдбреЗрдЯрд╛ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ (рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ) рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕рдВрдЪрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рд╕рд┐рд╕реНрдЯрдо рдореЗрдореЛрд░реА рдХрд╛ рдкреНрд░рдХрдЯреАрдХрд░рдг рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдУрдПрд╕ рдХрд░реНрдиреЗрд▓ рд╕рдВрдмрдВрдзрд┐рдд рдЬрд╛рдирдХрд╛рд░реА (рдЕрдВрджрд░ рд╕рдорд╛рд╣рд┐рдд) рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдореЗрдореЛрд░реА рд╕реЗ рдЕрдзрд┐рдХ (рдЕрдзрд┐рдХ) рдХрд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЕрдХреНрд╕рд░ рдирд┐рд░рд░реНрдердХ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрдмрд╛рджреА рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдореЗрдореЛрд░реА рдХреЛ рдкреВрд░реНрд╡-рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдирдП рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рд╕реВрдЪрдирд╛ рдХреЗ рдкреНрд░рд╕рд╛рд░ рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛ред
C рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреА рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ
рдЗрд╕ рдЦрдВрдб рдореЗрдВ, рд╣рдо рд╕реА рднрд╛рд╖рд╛ рдХреЗ рдХрдИ рдкрд╣рд▓реБрдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдореГрддрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред
рдирд┐рд░реНрд╡рд┐рд╡рд╛рдж рдЪрд░реЛрдВ рдХреА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реНрдерд┐рддрд┐
рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЪрд░ (рдЬреИрд╕реЗ рдХрд┐ рдЪрд╛рд░ рдпрд╛ рдЗрдВрдЯ), рд╕рд╛рде рд╣реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ (рд╕рд░рдгрд┐рдпреЛрдВ, рд╕рдВрд░рдЪрдирд╛рдУрдВ рдФрд░ рдпреВрдирд┐рдпрдиреЛрдВ) рдХреЗ рд╕рджрд╕реНрдп рдкрд╣рд▓реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХрдХрд░рдг рддрдХ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВ (рдЪрд╛рд╣реЗ рд╡реЗ рд╕реНрдЯреИрдХ рдкрд░ рдпрд╛ рдвреЗрд░ рдкрд░ рд░рдЦреЗ рдЧрдП рд╣реЛрдВ)ред C11 рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЙрджреНрдзрд░рдг (ISO / IEC 9899: 201x рд╕рдорд┐рддрд┐ рдбреНрд░рд╛рдлреНрдЯ N1570, рдЕрдкреНрд░реИрд▓ 2011):
6.7.9 рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди
...
10 рдпрджрд┐ рдРрд╕реА рд╡рд╕реНрддреБ рдЬрд┐рд╕рдореЗрдВ рд╕реНрд╡рдд: рднрдВрдбрд╛рд░рдг рдЕрд╡рдзрд┐ рд╣реИ, рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реИ ред
7.22.3.4 рдореЙрд▓реЛрдХ рдлрд╝рдВрдХреНрд╢рди
...
2 рдорд╛рд▓реЙрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рди рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЖрдХрд╛рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ i рдПрдб рдЖрдХрд╛рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдФрд░ рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реИ ред
7.22.3.5 рд░рд┐рдпрд▓рд▓реЛрдХ рдлрд╝рдВрдХреНрд╢рди
...
2 realloc рдлрд╝рдВрдХреНрд╢рди ptr рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдИ рдЧрдИ рдкреБрд░рд╛рдиреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдПрдХ рдирдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╕рд╛рдЗрдЬрд╝ speci by ed рд╣реЛрддрд╛ рд╣реИред рдирдИ рд╡рд╕реНрддреБ рдХреА рд╕рд╛рдордЧреНрд░реА, рдкреБрд░рд╛рдиреА рд╡рд╕реНрддреБ рдХреА рддрд░рд╣ рд╣реА рд╣реЛрдЧреА, рдЬреЛ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдереА, рдирдП рдФрд░ рдкреБрд░рд╛рдиреЗ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдХрдо рддрдХред рдкреБрд░рд╛рдиреА рд╡рд╕реНрддреБ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдкрд░реЗ рдирдИ рд╡рд╕реНрддреБ рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрд╛рдЗрдЯ рдХрд╛ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдорд╛рди рд╣реЛрддрд╛ рд╣реИ ред
рд╕рд┐рд╕реНрдЯрдо рдХреЛрдб рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╕реНрдЯреИрдХ рдкрд░ рд╕реНрдерд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдУрдПрд╕ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде рдЧрддрд┐рд╢реАрд▓ рдЖрд╡рдВрдЯрди рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реЛрддрд╛ рд╣реИ (рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдорд╛рдирдХ рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛ, рдЬреИрд╕рд╛ рдХрд┐ рдмрд╛рдж рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред
рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рд▓рд┐рдирдХреНрд╕ (Microsoft C / C ++ рдХрдВрдкрд╛рдЗрд▓рд░, gcc, LLVM) рдХреЗ рд▓рд┐рдП рддреАрди рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реА рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХреЛрдб рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рд░рд┐рд▓реАрдЬ-рдмрд┐рд▓реНрдб рдореЛрдб (рдпрд╛ рдЗрд╕рдХреЗ рд╕рдордХрдХреНрд╖) рдореЗрдВ рд╕реНрдЯреИрдХ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░-рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдкреНрд░реА-рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдХреЛ рд╡рд┐рд╢реЗрд╖ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП (рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдорд╛рд░реНрдХрд░ / / рдЖрд░рдЯреАрд╕реА), рд▓реЗрдХрд┐рди рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд░рд┐рд▓реАрдЬрд╝ рдмрд┐рд▓реНрдб рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╕реНрдЯреИрдХ рдкрд░ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рдЪрд░ рд╕рдВрдмрдВрдзрд┐рдд рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдкреБрд░рд╛рдиреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВред
рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╡рд┐рдВрдбреЛрдЬ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЗ рдорд╛рдирдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдПрдХ рдЗрдирдкреБрдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рджреЛ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЧреБрдгрд╛ (рдкрд░рд┐рдгрд╛рдо 1) рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд┐рддрд┐ рдореЗрдВ (InputValue == 0), рдЪрд░ OutputValue рдЕрд╕рд┐рдВрдЪрд┐рдд рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╡рд╛рдкрд╕ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рддреНрд░реБрдЯрд┐ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдХрд░реНрдиреЗрд▓ рд╕реНрдЯреИрдХ рдореЗрдореЛрд░реА рдХреЗ рдЪрд╛рд░ рдмрд╛рдЗрдЯ рдЦреЛрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред
NTSTATUS NTAPI NtMultiplyByTwo(DWORD InputValue, LPDWORD OutputPointer) { DWORD OutputValue; if (InputValue != 0) { OutputValue = InputValue * 2; } *OutputPointer = OutputValue; return STATUS_SUCCESS; }
рдХреЛрдб рд╕реВрдЪреА 1: рдПрдХ рдЕрд╕рдорд╛рди рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЗрдореЛрд░реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ред
рдПрдХ рдЕрд╕рд┐рдВрдЪрд┐рдд рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реАрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдмрд╣реБрдд рдЖрдо рдирд╣реАрдВ рд╣реИрдВ: рдПрдХ рддрд░рдл, рдЖрдзреБрдирд┐рдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрдХреНрд╕рд░ рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддреЗ рд╣реИрдВ, рджреВрд╕рд░реА рддрд░рдл, рдРрд╕реЗ рд▓реАрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд┐рдХрд╛рд╕ рдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг (рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 2 рдореЗрдВ) рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрд░рдЪрдирд╛ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд░рд┐рд╕рд╛рд╡ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрд░рдХреНрд╖рд┐рдд рд╕рдВрд░рдЪрдирд╛ рдлрд╝реАрд▓реНрдб рдХреЛрдб рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рдореЗрдВ рд╡рд╛рдкрд╕ рдХреЙрдкреА рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП, рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдХреЛ рдХрд░реНрдиреЗрд▓ рдореЗрдореЛрд░реА рдХреЗ рдЪрд╛рд░ рдмрд╛рдЗрдЯреНрд╕ рднреА рдЙрдЬрд╛рдЧрд░ рдХрд░рддреА рд╣реИред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреА рд╕рднреА рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд▓реМрдЯрд╛рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рдПрдХ рдЖрд╕рд╛рди рдХрд╛рдо рдирд╣реАрдВ рд╣реИред рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬрдмрд░рди рдЖрд░рдВрднрд┐рдХрддрд╛ рдЕрддрд╛рд░реНрдХрд┐рдХ рд▓рдЧрддреА рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдпрд╣ рдХреНрд╖реЗрддреНрд░ рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рдирд┐рднрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рддрдереНрдп рд╣реИ рдХрд┐ рд╕реНрдЯреИрдХ рдкрд░ (рдпрд╛ рдвреЗрд░ рдкрд░) рдПрдХ рдЕрдирдЗрдВрд╕реНрдЯреАрдЯреНрдпреВрдЯреЗрдб рд╡реИрд░рд┐рдПрдмрд▓ (рдпрд╛ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдлреАрд▓реНрдб) рдЗрд╕ рдореЗрдореЛрд░реА рдПрд░рд┐рдпрд╛ (рдПрдХ рдЕрдиреНрдп рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ) рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдХрд░реНрдиреЗрд▓ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕рдорд╕реНрдпрд╛ рдХреЗ рджрд┐рд▓ рдореЗрдВ рд╣реИред
typedef struct _SYSCALL_OUTPUT { DWORD Sum; DWORD Product; DWORD Reserved; } SYSCALL_OUTPUT, *PSYSCALL_OUTPUT; NTSTATUS NTAPI NtArithOperations( DWORD InputValue, PSYSCALL_OUTPUT OutputPointer ) { SYSCALL_OUTPUT OutputStruct; OutputStruct.Sum = InputValue + 2; OutputStruct.Product = InputValue * 2; RtlCopyMemory(OutputPointer, &OutputStruct, sizeof(SYSCALL_OUTPUT)); return STATUS_SUCCESS; }
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 2: рдПрдХ рдЖрд░рдХреНрд╖рд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЗрдореЛрд░реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ред
рд╕рдВрд░рдЪрдирд╛рдУрдВ рдФрд░ рдкреИрдбрд┐рдВрдЧ рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рд╕рдВрд░реЗрдЦрдг
рдореЗрдореЛрд░реА рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рдПрдХ рдЕрдЪреНрдЫреА рд╢реБрд░реБрдЖрдд рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдХреЛрдИ рдЕрд╕рдорд╛рди рдмрд╛рдЗрдЯреНрд╕ рдирд╣реАрдВ рд╣реИрдВред C11 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рддреЗ рд╣реИрдВ:
6.5.3.4 рдЖрдХрд╛рд░ рдФрд░ Alignof рдСрдкрд░реЗрдЯрд░реЛрдВ
...
4 [...] рдЬрдм рдПрдХ рдСрдкрд░реЗрдВрдб рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдпрд╛ рд╕рдВрдШ рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдЖрдВрддрд░рд┐рдХ рдФрд░ рдЕрдиреБрдЧрд╛рдореА рдЧрджреНрджреА рд╕рд╣рд┐рдд рдРрд╕реА рд╡рд╕реНрддреБ рдореЗрдВ рдХреБрд▓ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИред
6.2.8 рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╕рдВрд░реЗрдЦрдг
1 рдкреВрд░реНрдг рд╡рд╕реНрддреБ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕рдВрд░реЗрдЦрдг рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдЙрди рдкрддреЛрдВ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддреА рд╣реИрдВ рдЬрд┐рди рдкрд░ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдПрдХ рд╕рдВрд░реЗрдЦрдг рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХреАрдХреГрдд рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рд╣реИ рдЬреЛ рдХреНрд░рдорд┐рдХ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдмреАрдЪ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред [...]
6.7.2.1 рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╕рдВрдШ рдХреЗ рдирдореВрдиреЗ .1 ers
...
17 рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдпрд╛ рд╕рдВрдШ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЕрдирд╛рдо рдкреИрдбрд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИ ред
рдпрд╣реА рд╣реИ, x86 (-64) рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рд╕реА рднрд╛рд╖рд╛ рд╕рдВрдХрд▓рдХ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрд░реЗрдЦрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдПрдХ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░): рдкреНрд░рддреНрдпреЗрдХ рдРрд╕реЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдПрди рдмрд╛рдЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдПрди рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЖрдХрд╛рд░ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрдкреВрд░реНрдг рд╕рдВрд░рдЪрдирд╛рдПрдВ рдФрд░ рдЬреЛрдбрд╝ рднреА рддрдм рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрдм рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдРрд░реЗ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рдВрд░реЗрдЦрдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкреВрд░реА рд╣реЛрддреА рд╣реИред рд╕рдВрд░реЗрдЦрдг рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреИрдбрд┐рдВрдЧ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджреНрдпрдкрд┐ рд╡реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╕реАрдзреЗ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИрдВ, рдпреЗ рдмрд╛рдЗрдЯреНрд╕ рд╕реНрдореГрддрд┐ рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕реЗ рдкреБрд░рд╛рдиреЗ рдорд╛рди рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Listing 3 рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, SYSCALL_OUTPUT рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдореЗрдВ 4 рдФрд░ 8 рдмрд╛рдЗрдЯ рдлрд╝реАрд▓реНрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ 4 рдкреИрдбрд┐рдВрдЧ рдмрд╛рдЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓рд╛рд░реНрдЬрд╕рдо рдлреАрд▓реНрдб рдХреЗ рдкрддреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╡рд╣ 8 рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рджреЛрдиреЛрдВ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкреИрдбрд┐рдВрдЧ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдлрд┐рд░ рд╕реЗ рдХреВрдбрд╝реЗ рдХреЗ рдвреЗрд░ рдореЗрдореЛрд░реА рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд╛рди рдЪрд┐рддреНрд░ 2 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
typedef struct _SYSCALL_OUTPUT { DWORD Sum; QWORD LargeSum; } SYSCALL_OUTPUT, *PSYSCALL_OUTPUT; NTSTATUS NTAPI NtSmallSum( DWORD InputValue, PSYSCALL_OUTPUT OutputPointer ) { SYSCALL_OUTPUT OutputStruct; OutputStruct.Sum = InputValue + 2; OutputStruct.LargeSum = 0; RtlCopyMemory(OutputPointer, &OutputStruct, sizeof(SYSCALL_OUTPUT)); return STATUS_SUCCESS; }
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 3: рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдХреЗ рдореЗрдореЛрд░реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ред

рдЪрд┐рддреНрд░рд╛ 2: рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рд╕рдВрд░реЗрдЦрдг рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ред
рд╕рдВрд░реЗрдЦрдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реАрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЖрдЙрдЯрдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╕рдорд╕реНрдпрд╛ 64-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддреАрд╡реНрд░ рд╣реИ, рдЬрд╣рд╛рдВ рдкреЙрдЗрдВрдЯрд░реНрд╕, size_t рдФрд░ рдЗрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдХрд╛рд░ 4 рд╕реЗ 8 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рдмрдврд╝ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреИрдбрд┐рдВрдЧ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИред
рдЪреВрдВрдХрд┐ рдкреИрдбрд┐рдВрдЧ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рдореЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рдВрдкреВрд░реНрдг рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдорд╕реЗрдЯ рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
memset(&OutputStruct, 0, sizeof(OutputStruct));
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕реАрдХреЙрд░реНрдб рдЖрд░рд╕реА рдиреЗ рдЕрдкрдиреА рдкреБрд╕реНрддрдХ "рдж рд╕реАрдИрдЖрд░рдЯреА рд╕реА рдХреЛрдбрд┐рдВрдЧ рд╕реНрдЯреИрдВрдбрд░реНрдб, рджреВрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг: рд╕реБрд░рдХреНрд╖рд┐рдд, рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 98 рдирд┐рдпрдоред рдПрдбрд┐рд╕рди-рд╡реЗрд╕реНрд▓реЗ рдкреНрд░реЛрдлреЗрд╢рдирд▓" 2014 рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЖрджрд░реНрд╢ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдкреИрдб рдХрд░рдирд╛ред ) рдЕрднреА рднреА рдпрд╛рдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдлреЛрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрд╕рдиреНрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВред рд╡рд┐рдирд┐рд░реНрджреЗрд╢ C рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдерди рджреНрд╡рд╛рд░рд╛ рдЪрд┐рдВрддрд╛ рдХреЛ рдЙрдЪрд┐рдд рдард╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
6.2.6 рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐
6.2.6.1 рд╕рд╛рдорд╛рдиреНрдп
...
6 рдЬрдм рдХрд┐рд╕реА рд╕рджрд╕реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдпрд╛ рдпреВрдирд┐рдпрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдорд╛рди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рддреЛ рдХрд┐рд╕реА рднреА рдкреИрдбрд┐рдВрдЧ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЕрдиреБрд░реВрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рдмрд╛рдЗрдЯреНрд╕ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ ec рдПрдб рд╡реИрд▓реНрдпреВ рд▓реЗрддреЗ рд╣реИрдВ ред [...]
рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╕реА рд╕рдВрдХрд▓рдХ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╣рдордиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдмрд╛рд╣рд░ рдкрдврд╝рд╛ рдпрд╛ рд▓рд┐рдЦрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд░рд╛рдп рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдХреА рдЧрдИ рд╣реИ рдЬреЛ рдХрд┐ рдореЗрдорд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд╕рдВрдШ рдФрд░ рдХреНрд╖реЗрддреНрд░
рдХрдо рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЬреЛрдбрд╝ рдПрдХ рдФрд░ рдЬрдЯрд┐рд▓ рд╕реА рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг рд╣реИрдВред рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ C11 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреИрд╕реЗ рд╕реНрдореГрддрд┐ рдореЗрдВ рдпреВрдирд┐рдпрдиреЛрдВ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ:
6.2.5 рдкреНрд░рдХрд╛рд░
...
20 рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╡рд╕реНрддреБ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: [...] рдПрдХ рд╕рдВрдШ рдкреНрд░рдХрд╛рд░ рд╕рджрд╕реНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдХ рдЕрддрд┐рд╡реНрдпрд╛рдкреА рд╕реЗрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ , рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ name рдПрдб рдирд╛рдо рдФрд░ рд╕рдВрднрд╡рддрдГ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИред
6.7.2.1 рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╕рдВрдШ рдХреЗ рдирдореВрдиреЗ .1 ers
...
6 рдЬреИрд╕рд╛ рдХрд┐ 6.2.5 рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рджрд╕реНрдпреЛрдВ рдХрд╛ рдЕрдиреБрдХреНрд░рдо рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рднрдВрдбрд╛рд░рдг рдПрдХ рдХреНрд░рдордмрджреНрдз рдХреНрд░рдо рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╕рдВрдШ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рджрд╕реНрдпреЛрдВ рдХрд╛ рдЕрдиреБрдХреНрд░рдо рдУрд╡рд░рд▓реИрдк рд╣реЛрддрд╛ рд╣реИ ред
...
16 рдПрдХ рд╕рдВрдШ рдХрд╛ рдЖрдХрд╛рд░ рдЕрдкрдиреЗ рд╕рджрд╕реНрдпреЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ ред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рджрд╕реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдХрд┐рд╕реА рднреА рд╕рдордп рдПрдХ рдпреВрдирд┐рдпрди рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рд╕рдВрдШ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдХрдИ рдХреНрд╖реЗрддреНрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдЫреЛрдЯреЗ рдЖрдХрд╛рд░ рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмрдбрд╝реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рд╢реЗрд╖ рдмрд╛рдЗрдЯреНрд╕ рдЕрдирдзрд┐рдХреГрдд рд░рд╣рддреЗ рд╣реИрдВред рдЖрдЗрдП рдЪрд┐рддреНрд░ 4 рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП SYSCALL_OUTPUT рдпреВрдирд┐рдпрди рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 4 рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдХрд╛рд▓реНрдкрдирд┐рдХ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦреЗрдВред
typedef union _SYSCALL_OUTPUT { DWORD Sum; QWORD LargeSum; } SYSCALL_OUTPUT, *PSYSCALL_OUTPUT; NTSTATUS NTAPI NtSmallSum( DWORD InputValue, PSYSCALL_OUTPUT OutputPointer ) { SYSCALL_OUTPUT OutputStruct; OutputStruct.Sum = InputValue + 2; RtlCopyMemory(OutputPointer, &OutputStruct, sizeof(SYSCALL_OUTPUT)); return STATUS_SUCCESS; }
рдХреЛрдб рд╕реВрдЪреА 4: рдПрдХ рд╕рдВрдШ рдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд░рдХреЗ рдореЗрдореЛрд░реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ред

рдЪрд┐рддреНрд░рд╛ 3: рд╕рдВрд░реЗрдЦрдг рдХреЗ рд╕рд╛рде рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрдШ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ SYSCALL_OUTPUT рд╕рдВрдШ рдХрд╛ рдХреБрд▓ рдЖрдХрд╛рд░ 8 рдмрд╛рдЗрдЯреНрд╕ (рдмрдбрд╝реЗ рд▓рд╛рд░реНрдЬрд╕рдо рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдХрд╛рд░рдг) рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдЫреЛрдЯреЗ рдлрд╝реАрд▓реНрдб рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ 4 рдЕрдиреБрдЧрд╛рдореА рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмрд╛рдж рдореЗрдВ рдЙрдирдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓реАрдХ рдХрд░рддрд╛ рд╣реИред
рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрддрд╛ рд╕реНрдерд╛рди рдореЗрдВ рд╕рдо рдХреНрд╖реЗрддреНрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдкреНрд░рдпреБрдХреНрдд рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдкреВрд░реНрдг рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрдкреА рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдЕрдиреНрдп рдХрд╛рд░реНрдп рдлрд┐рдХреНрд╕ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд░реНрдиреЗрд▓ рдореЗрдореЛрд░реА рдореЗрдВ рдпреВрдирд┐рдпрди рдХреА рдПрдХ рдХреЙрдкреА рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рдореЗрдВ рд╡рд╛рдкрд╕ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдорд╕реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред
рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЖрдХрд╛рд░
рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рджреЛ рдЦрдВрдбреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдХрд╛рд░ рдХреЗ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реНрдиреЗрд▓ рдореЗрдореЛрд░реА рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рддреНрдпрдХреНрд╖ рдпрд╛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдпреЛрдЧрджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкрд╣рд▓реЗ рдЖрд░рдВрднрд┐рдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
C рдХреЗ рдкрд╛рд╕ рдХрд░реНрдиреЗрд▓ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИ - рдпрд╛, рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдпрддрдГ, рдХрд┐рд╕реА рднреА рдЕрд▓рдЧ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рдмреАрдЪред рднрд╛рд╖рд╛ рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХреМрди рд╕реЗ рдмрд╛рдЗрдЯ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдереЗ рдЬреЛ рдХрд┐ рдУрдПрд╕ рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдкрд╛рд╕ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХрд┐рди рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЙрдкреА рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдХреЛрдб рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рдПрдХ рд╕реВрдЬрди рдкреИрджрд╛ рдХрд░реЗрдЧрд╛, рдЗрд╕рдХреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рдЧрд┐рд░рд╛рд╡рдЯ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдПрдХ рдердХрд╛рдК рдФрд░ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдп рд╣реЛрдЧрд╛ред
рджреВрд╕рд░реА рдУрд░, рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рдВрдкреВрд░реНрдг рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рдПрдХ рдПрдХрд▓ рдХреЙрд▓ рдФрд░ рдЖрдХрд╛рд░ рдХреЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдХреЙрдкреА рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕рд░рд▓ рд╣реИ, рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рджреЗрдВ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдХрд┐рди рд╣рд┐рд╕реНрд╕реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдЬ рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЬрдм рд╕реВрдЪрдирд╛ рд░рд┐рд╕рд╛рд╡ рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рддреЛ рдУрдПрд╕ рдирд┐рд░реНрдорд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ рддреБрд░рдВрдд рдПрдХ рдореЗрдорд╕реЗрдЯ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрдЪ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
OS рдХреА рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ
рдХреБрдЫ рдХрд░реНрдиреЗрд▓ рдбрд┐рдЬрд╝рд╛рдЗрди рд╕рдорд╛рдзрд╛рди, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд┐рдзрд┐рдпрд╛рдБ, рдФрд░ рдХреЛрдб рдкреИрдЯрд░реНрди рд╣реИрдВ рдЬреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдореЛрд░реА рдПрдХреНрд╕рдкреЗрдВрд╢рди рдХрдордЬреЛрд░рд┐рдпреЛрдВ рд╕реЗ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрдк-рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреБрди: рдЧрддрд┐рд╢реАрд▓ рд╕реНрдореГрддрд┐
рдбрд╛рдпрдирд╛рдорд┐рдХ рдореЗрдореЛрд░реА рдХреЗ рд╡рд░реНрддрдорд╛рди рдПрд▓реЛрдХреЗрдЯрд░ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рдФрд░ рдХрд░реНрдиреЗрд▓ рдореЛрдб рдореЗрдВ) рджреЛрдиреЛрдВ рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдиреБрдХреВрд▓рди рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдореЛрд░реА рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рд╣реИ: рдЬрдм рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рдореЗрдореЛрд░реА рдХреЛ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдЕрдЧрд▓реА рдмрд╛рд░ рдЖрд╡рдВрдЯрд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реАрдкреАрдпреВ рдЪрдХреНрд░реЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдбрд┐рдХреНрд▓рд┐рдпрд░реЗрд╢рди рдФрд░ рдирдП рдЖрд╡рдВрдЯрди рдХреЗ рдмреАрдЪ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╕рд╛рдл рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдХрд░реНрдиреЗрд▓ рдХреЗ рджреЛ рдЕрд╕рдВрдмрджреНрдз рднрд╛рдЧ рдереЛрдбрд╝реЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдореЗрдореЛрд░реА рд░реЗрдВрдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрд░реНрдиреЗрд▓ рдХреА рдЧрддрд┐рд╢реАрд▓ рдореЗрдореЛрд░реА рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд░рд┐рд╕рд╛рд╡ рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдУрдПрд╕ рдШрдЯрдХреЛрдВ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ, рд╣рдо рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓, рдФрд░ рдЙрдирдХреЗ рд╕рдмрд╕реЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЧреБрдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рд▓реЛрдХрди рджреЗрддреЗ рд╣реИрдВред
рд╡рд┐рдВрдбреЛрдЬ
Windows рдХрд░реНрдиреЗрд▓ рдкреВрд▓ рдореИрдиреЗрдЬрд░ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп ExAllocatePoolWithTag рд╣реИ , рдЬрд┐рд╕реЗ рд╕реАрдзреЗ рдпрд╛ рдЙрдкрд▓рдмреНрдз рд╢реЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: ExAllocatePool {тИЕ, Ex, WithQuotaTag, WithTagPriority}ред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЗрдирдкреБрдЯ рдЭрдВрдбреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╡рд╛рдкрд╕ рдХреА рдЧрдИ рдореЗрдореЛрд░реА рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдлреНрд▓рд╢ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╡реЗ рд╕рднреА рдЕрдкрдиреЗ рд╕рдВрдмрдВрдзрд┐рдд MSDN рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреЗрддрд╛рд╡рдиреА рджреЗрддреЗ рд╣реИрдВ:
рдиреЛрдЯ рд╕реНрдореГрддрд┐ рдЬреЛ рдХрд╛рд░реНрдп рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдЕрд╕рд┐рдВрдЪрд┐рдд рд╣реИред рдпрджрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдореЛрдб рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ (рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рд╕рд╛рдордЧреНрд░реА рдХреЛ рд▓реАрдХ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП) рдХреЛ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рддреЛ рдХрд░реНрдиреЗрд▓-рдореЛрдб рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдпрд╣ рдореЗрдореЛрд░реА рд╢реВрдиреНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдЫрд╣ рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреВрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ: рдиреЙрдирдкреЗрдЬрд╝реНрдбрдкреВрд▓, рдиреЙрдирдкреЗрдЬрд╝рдбрдкреВрд▓рдПрдирдПрдХреНрд╕, рдиреЙрдирдкреЗрдЬрд╝рдбрдкреВрд▓ рд╕реЗрд╢рди, рдиреЙрдирдкреЗрдЬрд╝реНрдбрдкреВрд▓рд╕реЗрдВрд╢рдирдиреЗрдХреНрд╕, рдкреАрдбрдкреВрд▓ рдФрд░ рдкреАрдбрдкреВрд▓рд╕рд╢рдиред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдкрд╛рд╕ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдХреНрд╖реЗрддреНрд░ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдкреВрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рднреАрддрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдореГрддрд┐ рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡реГрддреНрддрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ, рдФрд░ рд╢реВрдиреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдХреЗрд╡рд▓ рддрднреА рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд▓реБрдХрд╕рд╛рдЗрдб рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдЙрдкрдпреБрдХреНрдд рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рдпрд╛ рдЕрдиреБрд░реЛрдз рдЗрддрдирд╛ рдмрдбрд╝рд╛ рд╣реИ рдХрд┐ рд╕реНрдореГрддрд┐ рдХреЗ рдирдП рдкреГрд╖реНрдареЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдкреВрд▓ рдореЗрдореЛрд░реА рдХреЗ рдкреНрд░рдХрдЯреАрдХрд░рдг рдХреЛ рд░реЛрдХрдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреЛрдИ рдХрд╛рд░рдХ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рд▓рдЧрднрдЧ рд╣рд░ рдРрд╕реА рддреНрд░реБрдЯрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реНрдиреЗрд▓ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдХреЛ рд▓реАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд▓рд┐рдирдХреНрд╕
рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рдореБрдЦреНрдп рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИрдВ:
- kmalloc - рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдордирдорд╛рдиреЗ рдЖрдХрд╛рд░ рдХреЗ рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЖрднрд╛рд╕реА рдФрд░ рднреМрддрд┐рдХ рдкрддрд╛ рд╕реНрдерд╛рди рджреЛрдиреЛрдВ рдореЗрдВ рдирд┐рд░рдВрддрд░), рд╕реНрд▓реИрдо рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
- kmem_cache_create рдФрд░ kmem_cache_alloc - рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ (рд╕рдВрд░рдЪрдирд╛рдПрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрдВрддреНрд░, рд╕реНрд▓реИрдм рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
- vmalloc рдПрдХ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЖрд╡рдВрдЯрди рдХрд╛рд░реНрдп рд╣реИ рдЬреЛ рдРрд╕реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рдирдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рднреМрддрд┐рдХ рдореЗрдореЛрд░реА рд╕реНрддрд░ рдкрд░ рдирд╣реАрдВ рд╣реИред
рдпреЗ рдлрд╝рдВрдХреНрд╢рди (рд╕реНрд╡рдпрдВ рдХреЗ рджреНрд╡рд╛рд░рд╛) рдпрд╣ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдЪрдпрдирд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдкреБрд░рд╛рдирд╛ (рд╕рдВрднрд╛рд╡рд┐рдд рдЧреЛрдкрдиреАрдп) рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд░реНрдиреЗрд▓ рдХреЗ рдвреЗрд░ рдХреА рд╕реНрдореГрддрд┐ рдХреЛ рдЦреЛрд▓рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдЕрд╢рдХреНрдд рдореЗрдореЛрд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
- Kmalloc рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ kzalloc рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╣реЛрддрд╛ рд╣реИ , рдЬреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд▓реМрдЯреА рд╣реБрдИ рдореЗрдореЛрд░реА рд╕рд╛рдлрд╝ рд╣реЛ рдЧрдИ рд╣реИред
- рд╡реИрдХрд▓реНрдкрд┐рдХ __GFP_ZERO рдзреНрд╡рдЬ рдХреЛ рдЙрд╕реА рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП kmalloc , kmem_cache_alloc рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- kmem_cache_create рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд┐рд░реНрдорд╛рддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдкрд░ рд▓реМрдЯрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреВрд░реНрд╡-рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╢реВрдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдПрдХ рдЖрд╡рд░рдг рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдЖрд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдо рдХрд░реНрдиреЗрд▓ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕реВрдЪрд┐рдд рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЧрддрд┐рд╢реАрд▓ рдореЗрдореЛрд░реА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЖрд╡рдВрдЯрди рдХреЗ рдмрд╛рдж рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА рдХреЙрд▓ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ рдореМрдЬреВрджрд╛ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХрд╛ рд╕рд╛рд░рдгреА
рдХрдИ рдУрдПрд╕ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдЙрдирдХреЗ рдкрд░реАрдХреНрд╖рдг рдирд╛рдореЛрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдирд╛рдорд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд╡рд┐рд╡рд┐рдзрддрд╛ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдлрд╝рд╛рдЗрд▓реЗрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ, рдХреБрдВрдЬрд┐рдпрд╛рдБ рдФрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреБрдВрдЬрд┐рдпрд╛рдБ, рд╡рд┐рдВрдбреЛрдЬрд╝, рдлреЛрдВрдЯ рдФрд░ рдмрд╣реБрдд рдХреБрдЫред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЗ рд▓рд┐рдП, рдирд╛рдо рдХреА рд▓рдВрдмрд╛рдИ рд╕реАрдорд┐рдд рд╣реИ рдФрд░ рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрдХреНрдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ MAX_PATH (260) рдпрд╛ LF_FACESIZE (32)ред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХрд░реНрдиреЗрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдХреНрд╕рд░ рдЕрдзрд┐рдХрддрдо рдЖрдХрд╛рд░ рдХреЗ рдмрдлрд╝рд░реНрд╕ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдХреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╛рдЗрдЬрд╝реЛрдлрд╝ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЗрд╡рд▓ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рднрд╛рдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ рдЕрдЧрд░ рддрд╛рд░ рдмрдбрд╝реА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рджрд╕реНрдп рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЧрддрд┐рд╢реАрд▓ рд╕реНрдореГрддрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗ, рдмрдбрд╝реЗ рдмрдлрд╝рд░реНрд╕ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╢реЗрд╖ рднрдВрдбрд╛рд░рдг рд╕реНрдерд╛рди рдЕрдХреНрд╕рд░ рдлреНрд▓рд╢ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдХрд░реНрдиреЗрд▓ рдореЗрдореЛрд░реА рдХреЗ рд▓рдВрдмреЗ рд╕рдиреНрдирд┐рд╣рд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЧрдВрднреАрд░ рд▓реАрдХ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИред рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 5 рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд╕реНрдерд╛рдиреАрдп рдмрдлрд░ рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдкрде рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП RtlGetSystemPath рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдХреЙрд▓ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рднреА 260 рдмрд╛рдЗрдЯреНрд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рдХреЙрд▓рд░ рдХреЛ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
NTSTATUS NTAPI NtGetSystemPath(PCHAR OutputPath) { CHAR SystemPath[MAX_PATH]; NTSTATUS Status; Status = RtlGetSystemPath(SystemPath, sizeof(SystemPath)); if (NT_SUCCESS(Status)) { RtlCopyMemory(OutputPath, SystemPath, sizeof(SystemPath)); } return Status; }
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 5: рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдлрд░ рдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд░рдХреЗ рдореЗрдореЛрд░реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╡рд╛рдкрд╕ рд╕реНрдореГрддрд┐ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЪрд┐рддреНрд░ 4 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЪрд┐рддреНрд░рд╛ 4: рдПрдХ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд▓рд╛рдЗрди рдмрдлрд░ рдХреА рдореЗрдореЛрд░реАред
рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдзрд┐рдд рдкрде рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдкреВрд░реНрдг рдмрдлрд░ред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЖрдХрд╛рд░ рдЖрдХрд╛рд░ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдЖрдХрд╛рд░ рдХрд╛ рдЖрдХрд▓рди (RtlCopyMemory рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдбреЗрдЯрд╛ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рддреНрд░рд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХрд░реНрдиреЗрд▓ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдордирдорд╛рдирд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЖрдХрд╛рд░
рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдмрдлрд╝рд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░реНрд╕ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдмрдлрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╕реНрдореГрддрд┐ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд╝рд░ рдХреЗ рдкреВрд░реЗ рдЖрдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдХрд░реНрдиреЗрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд╝рд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХреА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕реЗ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реВрдЪреА 6 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
NTSTATUS NTAPI NtMagicValues(LPDWORD OutputPointer, DWORD OutputLength) { if (OutputLength < 3 * sizeof(DWORD)) { return STATUS_BUFFER_TOO_SMALL; } LPDWORD KernelBuffer = Allocate(OutputLength); KernelBuffer[0] = 0xdeadbeef; KernelBuffer[1] = 0xbadc0ffe; KernelBuffer[2] = 0xcafed00d; RtlCopyMemory(OutputPointer, KernelBuffer, OutputLength); Free(KernelBuffer); return STATUS_SUCCESS; }
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 6: рдордирдорд╛рдиреЗ рдЖрдХрд╛рд░ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЗрдореЛрд░реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ред
рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рддреАрди рд╡рд┐рд╢реЗрд╖ 32-рдмрд┐рдЯ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреБрд▓ 12 рдмрд╛рдЗрдЯреНрд╕ рд╣реИрдВред рдпрджреНрдпрдкрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреА рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕рд╣реА рдмрдлрд░ рдЖрдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЙрдЯрдкреБрдЯрд▓реНрд╡реЗрдВрдЯ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╣рд╛рдБ рд╕рдорд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реИ, рдХрд░реНрдиреЗрд▓ рдореЗрдореЛрд░реА рдХреЗ 12 рдмрд╛рдЗрдЯреНрд╕ рдЖрд╡рдВрдЯрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рднрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╡рд╛рдкрд╕ рджрд┐рдП рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдореЛрдб рдмрдлрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдПрдХ рдкреВрд▓ рдмреНрд▓реЙрдХ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдирд┐рдпрдВрддреНрд░рд┐рдд рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде) рдФрд░ рдкреВрд░реЗ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рдкрд░ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ 12 рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЧрд▓рддреА рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЦреЛрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЪрд┐рддреНрд░ 5 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЪрд┐рддреНрд░ 5: рдордирдорд╛рдиреЗ рдЖрдХрд╛рд░ рдХреА рдмрдлрд░ рдореЗрдореЛрд░реАред
рдЗрд╕ рдЦрдВрдб рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рд╕реНрдХреАрдорд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдПрдХ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рд╕реНрдореГрддрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддреНрдпрдВрдд рдЙрдкрдпреЛрдЧреА рдЖрджрд┐рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреА рд╣реИ:
- , Windows, . , .
- . , , . , ( тАФ ) .
, . , , .
,
, . , Windows .
, , . , : AddressSanitizer , PageHeap Special Pool . , , - . , . , , , , , . , ( ).
, , , . , .
, API
API, Windows (Win32/User32 API). API , , , . , , , , . .
, . , . , , , . , , .
, , . , KASLR (Kernel Address Space Layout Randomization ), . : Windows, Hacking Team 2015 ( Juan Vazquez. Revisiting an Info Leak ) (derandomize) win32k.sys, . , Matt Tait' Google Project Zero ( Kernel-mode ASLR leak via uninitialized memory returned to usermode by NtGdiGetTextMetrics ) MS15-080 (CVE-2015-2433).
(/) , , (control ямВow), : , , , , StackGuard Linux /GS Windows . , . , , .
(/)
(/) , , , : , , , . , , . . , ( , ) , , .

Microsoft Windows
2015 Windows. 2015 Matt Tait win32k!NtGdiGetTextMetrics. Windows Hacking Team. , , , 0-day Windows.
2015, WanderingGlitch (HP Zero Day Initiative) ( Acknowledgments тАУ 2015 ). Ruxcon 2016 ( ) "Leaking Windows Kernel Pointers" .
, 2017 fanxiaocao pjf IceSword Lab (Qihoo 360) "Automatically Discovering Windows Kernel Information Leak Vulnerabilities" , , 14 2017 (8 ). Bochspwn Reloaded, , . VMware (Bochs) . , Bochspwn Reloaded, .
, , 2010-2011 , win32k: "Challenge: On 32bit Windows7, explain where the upper 16bits of eax come from after a call to NtUserRegisterClassExWOW()" "Subtle information disclosure in WIN32K.SYS syscall return values" . Windows 8, 2015 Matt Tait , : Google Project Zero Bug Tracker .
( ), , 2017 - Windows -, : Joseph Bialek тАФ "Anyone notice my change to the Windows IO Manager to generically kill a class of info disclosure? BuямАeredIO output buямАer is always zero'd" . , IOCTL- .
, Visual Studio 15.5 POD- , "= {0}", . , padding- () .
Linux
Windows, Linux , 2010 . , ( ) ( ) . , Windows Linux , тАФ , .
, Linux . "Linux kernel vulnerabilities: State-of-the-art defenses and open problems" 2010 2011 28 . 2017- "Securing software systems by preventing information leaks" Lu K. 59 , 2013- 2016-. . : Rosenberg Oberheide 25 , Linux 2009-2010 , . Linux c grsecurity / PaX-hardened . Vasiliy Kulikov 25 2010-2011 , Coccinelle . , Mathias Krause 21 2013 50 .
, , Linux. тАФ -Wuninitialized ( gcc, LLVM), . kmemcheck , Valgrind' . , . , KernelAddressSANitizer KernelMemorySANitizer . KMSAN syzkaller ( ) 19 , .
Linux. 2014 тАФ 2016 Peir┬┤o Coccinelle , Linux 3.12: "Detecting stack based kernel information leaks" International Joint Conference SOCO14-CISIS14-ICEUTE14, pages 321тАУ331 (Springer, 2014) "An analysis on the impact and detection of kernel stack infoleaks" Logic Journal of the IGPL. , . 2016- Lu UniSan тАФ , , : , . , 20% (350 1800), 19 Linux Android.
тАФ (multi-variant program execution), , . , . , KASLR, -, . , 2006 DieHard: probabilistic memory safety for unsafe languages, 2017 тАФ BUDDY: Securing software systems by preventing information leaks. John North "Identifying Memory Address Disclosures" 2015- . , SafeInit (Comprehensive and Practical Mitigation of Uninitialized Read Vulnerabilities) , , . , , , Linux.
, . , : , . , , - , . .
CONFIG_PAGE_POISONING CONFIG_DEBUG_SLAB, -. -, . , , , Linux.
grsecurity / PaX . , PAX_MEMORY_SANITIZE , slab , ( тАФ ). , PAX_MEMORY_STRUCTLEAK , ( ), . padding- (), 100% . , тАФ PAX_MEMORY_STACKLEAK, . , , . (Kernel Self Protection Project) STACKLEAK .
Linux:
Secure deallocation, Chow , 2005Chow, Jim and PfaямА, Ben and GarямБnkel, Tal and Rosenblum, Mendel. Shredding Your Garbage: Reducing Data Lifetime Through Secure Deallocation. In USENIX Security Symposium, pages 22тАУ22, 2005.
, , ( ) . Linux .
Split Kernel, Kurmus Zippel, 2014Kurmus, Anil and Zippel, Robby. A tale of two kernels: Towards ending kernel hardening wars with split kernel. In Proceedings of the 2014 ACM SIGSAC Conference on Computer and Communications Security, pages 1366тАУ1377. ACM, 2014.
, .
SafeInit, Milburn , 2017Milburn, Alyssa and Bos, Herbert and GiuямАrida, Cristiano. SafeInit: Comprehensive and Practical Mitigation of Uninitialized Read Vulnerabilities. In Proceedings of the 2017 Annual Network and Distributed System Security Symposium (NDSS)(San Diego, CA), 2017.
, , .
UniSan, Lu , 2016Lu, Kangjie and Song, Chengyu and Kim, Taesoo and Lee, Wenke. UniSan: Proactive kernel memory initialization to eliminate data leakages. In Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security, pages 920тАУ932. ACM, 2016.
SafeInit , , , , .
, Linux .
( )
, , ( ). : (), , , , ( - ) . , . , , .
, :
- Bochspwn Reloaded тАУ detection with software x86 emulation
- Windows bug reproduction techniques
- Alternative detection methods
- Other data sinks
- Future work
- Other system instrumentation schemes
, :) , .