
* рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВред рдпрд╣ рд▓реЗрдЦ рд╕реНрд╡рдпрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд▓рд╛рдЧреВ рддрдВрддреНрд░реЛрдВ рдХреЛ рдордзреНрдпрдо рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддрд╛ рд╣реИред MacOS рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрднреА рддрдХ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред
рдПрдХ рд╢рдирд┐рд╡рд╛рд░ рдХреА рджреЛрдкрд╣рд░ рдХреЛ рдЧрд┐рдердм рдХреЗ рдЖрд╕рдкрд╛рд╕ рдШреВрдорддреЗ рд╣реБрдП, рдореИрдВ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЖрдпрд╛, рдЬреЛ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдордХреНрдЦреА рдкрд░ c ++ рдХреЛрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЦреБрдж рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рд╕реЗ рдиреАрдЪреЗ рдЙрддрд░ рдЧрдпрд╛ рдерд╛, рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдкрдЫрддрд╛рд╡рд╛ рдирд╣реАрдВ рдерд╛, рдФрд░ рдЕрдм рд╕рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдпрд╛ рддреЛ рд▓рд┐рдирдХреНрд╕ (рдШрд░ рдкрд░) рдпрд╛ рдореИрдХрдУрдПрд╕ (рдХрд╛рдо рдкрд░) рдкрд░ рдХреА рдЬрд╛рддреА рд╣реИред рдереЛрдбрд╝рд╛ рдЧреБрдЧрд▓реА рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдКрдкрд░ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдлреА рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ, рдФрд░ msvc рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ "рдПрдбрд┐рдЯ рдПрдВрдб рдХрдВрдЯрд┐рдиреНрдпреВ" рдлрдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдПрдХрдорд╛рддреНрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЧреИрд░-рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рддрд╣рдд рдХреЛрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рдорд┐рд▓рд╛ (рдХреНрдпрд╛ рдореИрдВ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ?)ред рдКрдкрд░ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓реЗрдЦрдХ рд╕реЗ рд╕рд╡рд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╡рд╣ рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдВрджрд░рдЧрд╛рд╣ рдмрдирд╛ рджреЗрдЧрд╛, рдЬрд╡рд╛рдм рдирд╣реАрдВ рдерд╛ред
рдореБрдЭреЗ рддреБрд░рдВрдд рдпрд╣ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдЙрд╕ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА рдЬрд┐рд╕рдореЗрдВ рдореБрдЭреЗ рдореМрдЬреВрджрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб рдХреЛ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, RCCPP рдпрд╛ cr рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрд╣рд╛рдБ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдкреБрдирдГ рд▓реЛрдб рдХреЛрдб рдПрдХ рдЕрд▓рдЧ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рднрд░реА рд╣реБрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред
"рдпрд╣ рдХреИрд╕реЗ?" - рдореИрдВрдиреЗ рд╕реЛрдЪрд╛, рдФрд░ рдзреВрдк рдЬрд▓рд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред
рдХреНрдпреЛрдВ?
рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ gamedev рдХрд░рддрд╛ рд╣реВрдВред рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдореИрдВ рдХрд┐рд╕реА рднреА рджреГрд╢реНрдп рдХреЗ рдЦреЗрд▓ рддрд░реНрдХ рдФрд░ рд▓реЗрдЖрдЙрдЯ рд▓рд┐рдЦрдиреЗ рдкрд░ рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рднреА рд╕рд╣рд╛рдпрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП imgui рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдореЗрд░рд╛ рдЪрдХреНрд░, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реИ, рд▓рд┐рдЦреЗрдВ -> рд╕рдВрдХрд▓рди -> рднрд╛рдЧреЛ -> рджреЛрд╣рд░рд╛рдПрдВред рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╣реЛрддрд╛ рд╣реИ (рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдирд┐рд░реНрдорд╛рдг, рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ ccache, рдЖрджрд┐)ред рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдЪрдХреНрд░ рдХреЛ рдЕрдХреНрд╕рд░ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдирдпрд╛ рдЧреЗрдо рдореИрдХреЗрдирд┐рдХреНрд╕ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕реЗ "рдЬрдВрдк" рд╣реЛрдиреЗ рджреЗрдВ, рдПрдХ рд╡реИрдз, рдирд┐рдпрдВрддреНрд░рд┐рдд рдЬрдВрдк:
1. рдПрдХ рдбреНрд░рд╛рдлреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЧрддрд┐, рдЗрдХрдЯреНрдард╛, рд▓реЙрдиреНрдЪред рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдореИрдВ рдЧрд▓рддреА рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдореЗрдВ рдПрдХ рдирд╛рдбрд╝реА рд▓рдЧрд╛рддрд╛ рд╣реВрдВ, рдФрд░ рдПрдХ рдмрд╛рд░ рдирд╣реАрдВред
2. рдлрд┐рдХреНрд╕реНрдб, рдЕрд╕реЗрдВрдмрд▓, рд▓реЙрдиреНрдЪ, рдЕрдм рд╕рд╛рдорд╛рдиреНрдпред рд▓реЗрдХрд┐рди рдЖрд╡реЗрдЧ рдХрд╛ рдкреВрд░реНрдг рдореВрд▓реНрдп рдЕрдзрд┐рдХ рд▓реЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред
3. рдлрд┐рдХреНрд╕реНрдб, рдЕрд╕реЗрдВрдмрд▓, рд▓реЙрдиреНрдЪ, рд╡рд░реНрдХрд┐рдВрдЧред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИред рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рдХреНрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
4. рддрд╛рдХрдд, рдЗрдХрдЯреНрдареЗ, рд▓реЙрдиреНрдЪ, рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдорд╕реМрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦрд╛ред рдХреЗрд╡рд▓ рдХреВрдж рдХреЗ рд╕рдордп рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рдЧрддрд┐ рдХреЛ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред
...
10. рдлрд┐рдХреНрд╕реНрдб, рдЕрд╕реЗрдВрдмрд▓, рд▓реЙрдиреНрдЪ, рд╡рд░реНрдХрд┐рдВрдЧред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╢рд╛рдпрдж gravityScale
рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
...
20. рд╢рд╛рдирджрд╛рд░, рдпрд╣ рд╕реБрдкрд░ рд▓рдЧ рд░рд╣рд╛ рд╣реИ! рдЕрдм рд╣рдо gamediz рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рд╕рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ, рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рднрд░рддреЗ рд╣реИрдВред
...
30. рдХреВрджрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред
рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, рдЖрдкрдХреЛ рдХреЛрдб рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рдкрд╣реБрдВрдЪреЗрдВ рдЬрд╣рд╛рдВ рдореИрдВ рдХреВрдж рд╕рдХрддрд╛ рд╣реВрдВред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдХрдо рд╕реЗ рдХрдо 10 рд╕реЗрдХрдВрдб рд▓реЗрддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рдЦреБрд▓реЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреВрдж рд╕рдХрддрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ рдЕрднреА рднреА рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдФрд░ рдЕрдЧрд░ рдореБрдЭреЗ рдПрди рдЗрдХрд╛рдЗрдпреЛрдВ рдХреА рдКрдВрдЪрд╛рдИ рдХреЗ рд╕рд╛рде рдмреНрд▓реЙрдХреЛрдВ рдкрд░ рдХреВрджрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдпрд╣рд╛рдВ рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкрд░реАрдХреНрд╖рдг рджреГрд╢реНрдп рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЬрд┐рд╕реЗ рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдРрд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рдХреЛрдб рдХрд╛ рдПрдХ рдЧрд░реНрдо рдкреБрдирдГ рд▓реЛрдб рдЖрджрд░реНрд╢ рд╣реЛрдЧрд╛ред рдмреЗрд╢рдХ, рдпрд╣ рдПрдХ рд░рд╛рдордмрд╛рдг рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рдХрднреА-рдХрднреА рд░рд┐рдмреВрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдЦреЗрд▓ рдХреА рджреБрдирд┐рдпрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдХрдИ рдЪреАрдЬреЛрдВ рдореЗрдВ, рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдзреНрдпрд╛рди рдФрд░ рдмрд╣реБрдд рд╕рдордп рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди
- рдХреЛрдб рдмрджрд▓рддреЗ рд╕рдордп, рд╕рднреА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП
- рдпрд╣ рд▓рд┐рдирдХреНрд╕ рдФрд░ macOS рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
- рдЗрд╕рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
- рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдпрд╣ рддреГрддреАрдп-рдкрдХреНрд╖реАрдп рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛, рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдпрд╛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЖрд╡реЗрджрди рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
- рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрд╡реЗрджрди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
- рдЕрдЧрд░ рдпрд╣ cmake + рдореЗрдХ / рдирд┐рдВрдЬрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рддреЛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ
- рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдЕрдЧрд░ рдпрд╣ рдбреАрдмрдЧрд┐рди рдмрд┐рд▓реНрдбреНрд╕ (рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд┐рдирд╛, рдЯреНрд░рд┐рдорд┐рдВрдЧ рд╡рд░реНрдгреЛрдВ рдХреЗ рдмрд┐рдирд╛, рдЖрджрд┐) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдпрд╣ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХрд╛ рдиреНрдпреВрдирддрдо рд╕реЗрдЯ рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрдпрд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
- рд╕реНрдереИрддрд┐рдХ рдЪрд░ рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ рдирдП рдХреЛрдб рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ (рджреЗрдЦреЗрдВ рдХрд┐ "рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрдпреЛрдВ рд╣реИ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП" рд╕реНрдереИрддрд┐рдХ рдЪрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ ")
- рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░рд┐рд▓реЛрдб рдХрд░рдирд╛ (рд╣реЗрдбрд░ рдмрджрд▓рд╛ -> рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг
рдЖрдзрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рднреА рдЖрд╢реНрд░рд┐рдд рдлрд╛рдЗрд▓реЗрдВ) - рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдХреЛрдб рдкреБрдирдГ рд▓реЛрдб рдХрд░рдирд╛
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЙрд╕ рдХреНрд╖рдг рддрдХ, рдореИрдВ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреВрд░ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЦрд░реЛрдВрдЪ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдФрд░ рдЖрддреНрдорд╕рд╛рдд рдХрд░рдиреА рдереАред
рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░, рддрдВрддреНрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
- рд╣рдо рд╕реНрд░реЛрдд рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреЗ рд╣реИрдВ
- рдЬрдм рд╕реНрд░реЛрдд рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдпрд╣ рд╕рдВрдХрд▓рди рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреА рд╣реИ рдХрд┐ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдХрд▓рд┐рдд рдереА
- рд╕рднреА рдПрдХрддреНрд░рд┐рдд рд╡рд╕реНрддреБрдПрдБ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рднрд░реА рд╣реБрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИрдВ
- рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдПрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
- рд╕реНрдереИрддрд┐рдХ рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЖрд╡реЗрджрди рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдЪрд▓реЛ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ - рдлрд╝рдВрдХреНрд╢рди рдкреБрдирдГ рд▓реЛрдб рддрдВрддреНрд░ред
рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп
рдпрд╣рд╛рдВ (рдпрд╛ рд▓рдЧрднрдЧ) рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП 3 рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд▓реЛрдХрдкреНрд░рд┐рдп рддрд░реАрдХреЗ рд╣реИрдВ:
- LD_PRELOAD рдХреЗ рд╕рд╛рде рдЯреНрд░рд┐рдХ - рдЖрдкрдХреЛ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рднрд░реА рд╣реБрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
strcpy
рдлрд╝рдВрдХреНрд╢рди, рдФрд░ рдЗрд╕реЗ рдмрдирд╛рдПрдВ рддрд╛рдХрд┐ рдЬрдм рдЖрдк рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░реЗрдВ рддреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрдЬрд╛рдп strcpy
рдХрд╛ рдореЗрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓реЗ - рдкреАрдПрд▓рдЯреА рдФрд░ рдЬреАрдУрдЯреА рдЯреЗрдмрд▓ рдмрджрд▓реЗрдВ - рдЖрдкрдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ "рдЕрдзрд┐рднрд╛рд░" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
- рдлрдВрдХреНрд╢рди рд╣реБрдХрд┐рдВрдЧ - рдЖрдкрдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдереНрд░реЗрдб рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рдкрд╣рд▓реЗ 2 рд╡рд┐рдХрд▓реНрдк, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХреЗрд╡рд▓ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдлрдВрдХреНрд╢рди рд╣реБрдХрд┐рдВрдЧ рд╣рдорд╛рд░рд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ!
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╣реБрдХрд┐рдВрдЧ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
- рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рдорд┐рд▓рд╛ рд╣реИ
- рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдмрд╛рдЗрдЯреНрд╕ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдмрд┐рдирд╛ рд╢рд░реНрдд рд╕рдВрдХреНрд░рдордг рджреНрд╡рд╛рд░рд╛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ
- ...
- рд▓рд╛рдн!
Msvc рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП 2 рдЭрдВрдбреЗ рд╣реИрдВ - /hotpatch
рдФрд░ /FUNCTIONPADMIN
ред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкрд╣рд▓рд╛ 2 рдмрд╛рдЗрдЯреНрд╕ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ "рд╢реЙрд░реНрдЯ рдЬрдВрдк" рдХреЗ рд╕рд╛рде рдЙрдирдХреЗ рдмрд╛рдж рдХреЗ рдкреБрдирд░реНрд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдХреЗ рд╕рд╛рдордиреЗ рдЦрд╛рд▓реА рд╕реНрдерд╛рди рдХреЛ "рд▓рдВрдмреА рдЫрд▓рд╛рдВрдЧ" рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫрд┐рдд рд╕реНрдерд╛рди рдкрд░ "рд▓рдВрдмреА рдЫрд▓рд╛рдВрдЧ" рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП 2 рдЬрдВрдк рдореЗрдВ рдЖрдк рдкреБрд░рд╛рдиреЗ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдирдП рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╡рд┐рдВрдбреЛрдЬрд╝ рдФрд░ msvc рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ ред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХреНрд▓реИрдВрдЧ рдФрд░ рдЬреАрд╕реАрд╕реА (рдХрдо рд╕реЗ рдХрдо рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХрдУрдПрд╕ рдХреЗ рддрд╣рдд) рдореЗрдВ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЗрддрдиреА рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рд╕реАрдзреЗ рдкреБрд░рд╛рдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдКрдкрд░ рд▓рд┐рдЦреЗрдВрдЧреЗред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдмрд╣реБрд╕реНрддрд░реАрдп рд╣реИ рддреЛ рд╣рдо рдореБрд╕реАрдмрдд рдореЗрдВ рдкрдбрд╝рдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рдЙрдард╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╣рдо рдПрдХ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрдмрдХрд┐ рджреВрд╕рд░рд╛ рдзрд╛рдЧрд╛ рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдХреЛрдб рдХреЛ рдПрдХ рдереНрд░реЗрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рджреВрд╕рд░рд╛ рдереНрд░реЗрдб рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ред
рдПрдХ рд╕реВрдХреНрд╖реНрдо рдмрд┐рдВрджреБ рд╣реИред 32-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░, рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рди рдкрд░ "рдХреВрдж" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 5 рдмрд╛рдЗрдЯреНрд╕ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред 64-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░, рдпрджрд┐ рд╣рдо рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдЦрд░рд╛рдм рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ 14 рдмрд╛рдЗрдЯреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ рдХрд┐ рдорд╢реАрди рдХреЛрдб рдХреЗ рдкреИрдорд╛рдиреЗ рдореЗрдВ 14 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛рдлреА рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдХреЛрдб рдореЗрдВ рдХрд┐рд╕реА рдЦрд╛рд▓реА рд╢рд░реАрд░ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕реНрдЯрдм рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рддреЛ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмрд╛рдИ рдореЗрдВ 14 рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдХрдо рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдкреВрд░реА рд╕рдЪреНрдЪрд╛рдИ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ, рд▓рд┐рдЦрдиреЗ рдФрд░ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдбрд┐рд╕реИрдореНрдмрд▓реЗрд░ рдХреЗ рдкреАрдЫреЗ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдпрд╛, рдФрд░ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рд╕рднреА рдлрд╝рдВрдХреНрд╢рдВрд╕ 16-рдмрд╛рдЗрдЯ рд╕реАрдорд╛ (рдмрд┐рдирд╛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдбрд┐рдмрдЧ рдмрд┐рд▓реНрдб, рдСрд▓реНрдЯрд░реНрдб рдХреЛрдб рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ) рдкрд░ рд╕рдВрд░реЗрдЦрд┐рдд рд╣реИрдВред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдмреАрдЪ рдХрдо рд╕реЗ рдХрдо 16 рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрдВрдЧреЗ, рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ "рдЬрд╛рдо" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╕рддрд╣реА рдЧреБрдЧрд▓реА рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдкрддрд╛ рдирд╣реАрдВ рдерд╛, рдореИрдВ рд╕рд┐рд░реНрдл рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдерд╛, рдпрд╛ рдЖрдЬ рд╕рднреА рд╕рдВрдХрд▓рдХ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдЧрд░ рд╕рдВрджреЗрд╣ рд╣реИ, рддреЛ рдмрд╕ рд╕реНрдЯрдм рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреБрдЫ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдмрдбрд╝рд╛ рд╣реЛ рдЬрд╛рдПред
рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓рд╛ рдЕрдирд╛рдЬ рд╣реИ - рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдирдП рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ред
рдПрдХ рдХреЙрдкреА рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВ
рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдпрд╛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рд╕рднреА рдХреЗ рдкрддреЗ (рди рдХреЗрд╡рд▓ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП) рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓рддрд╛ рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╡рд░реНрдг рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рд╕реЗ рдХрдЯреЗ рд╣реБрдП рдирд╣реАрдВ рд╣реИрдВред рд▓рд┐рдирдХреНрд╕ рдкрд░, рдпреЗ elf.h
рдФрд░ link.h
рд╕реЗ elf.h
, loader.h
, loader.h
рдФрд░ nlist.h
ред
dl_iterate_phdr
рдХрд╛ рдЙрдкрдпреЛрдЧ dl_iterate_phdr
рд╣рдо рд╕рднреА рднрд░реА рд╣реБрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░рд┐рдпреЛрдВ рд╕реЗ dl_iterate_phdr
рд╣реИрдВ рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрд╛рд░реНрдпрдХреНрд░рдо- рд╡рд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдЬрд╣рд╛рдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓реЛрдб рд╣реИ
.symtab
рд╕реЗрдХреНрд╢рди рд╕реЗ .symtab
рд╡рд░реНрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓рддреА рд╣реИ, рдЕрд░реНрдерд╛рддреН рдирд╛рдо, рдкреНрд░рдХрд╛рд░, рдЙрд╕ рдЕрдиреБрднрд╛рдЧ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рдирд┐рд╣рд┐рдд рд╣реИ, рдЖрдХрд╛рд░, рдФрд░ рдЖрднрд╛рд╕реА рдкрддреЗ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓реЛрдб рдкрддреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕рдХреЗ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдкрддреЗ рдХреА рдЧрдгрдирд╛ рднреА рдХрд░рддреЗ рд╣реИрдВред
рдПрдХ-рдПрдХ рд╕реВрдХреНрд╖реНрдорддрд╛ рд╣реИред рдпреЛрдЧрд┐рдиреА рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рд╕рд┐рд╕реНрдЯрдо .symtab
рд╕реЗрдХреНрд╢рди (рдпрджрд┐ рдпрд╣ рдЧрд▓рдд рд╣реИ рддреЛ рд╕рд╣реА рд╣реИ) рд▓реЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ .dynsym
рд╕реЗрдХреНрд╢рди рд╣рдореЗрдВ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕рдореЗрдВ рд╕реЗ рджреГрд╢реНрдпрддрд╛ STV_INTERNAL
рдФрд░ STV_HIDDEN
рд╡рд░реНрдг рдирд╣реАрдВ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ, рддреЛ рд╣рдо рдРрд╕реЗ рдХрд╛рд░реНрдп рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗ:
рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪрд░:
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдиреБрдЪреНрдЫреЗрдж 3 рдореЗрдВ, рд╣рдо рдЙрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ dl_iterate_phdr
рдиреЗ dl_iterate_phdr
рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдбрд┐рд╕реНрдХ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдФрд░ рдХреБрдЫ рдпреЛрдЧрд┐рдиреА рдкрд╛рд░реНрд╕рд░ (рдпрд╛ рдирдВрдЧреЗ рдПрдкреА) рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреБрдЫ рднреА рдпрд╛рдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред MacOS рдкрд░, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ рд╕рд┐рд╕реНрдЯрдо рдПрдкреАрдЖрдИ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд╛рдо рдЕрд▓рдЧ рд╣реИрдВред
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рд╕рднреА рд╡рд░реНрдгреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ:
- рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ
STT_FUNC
рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕реНрдерд┐рдд STT_FUNC
рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд░реНрдг рд╣реИрдВ, рдЬреЛ рдЖрдХрд╛рд░ рдореЗрдВ рдЧреИрд░-рд╢реВрдиреНрдп рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗрд╡рд▓ рд╡рд╣реА рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдпрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ - рд╕реНрдереИрддрд┐рдХ рдЪрд░ рдЬрд┐рдирдХреЗ рдореВрд▓реНрдп рдЖрдк рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡реЗ
.bss
рдЦрдВрдб рдореЗрдВ рд╕реНрдерд┐рдд STT_OBJECT
рдХреЗ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ
рдкреНрд░рд╕рд╛рд░рдг рдЗрдХрд╛рдЗрдпрд╛рдБ
рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕реНрд░реЛрдд рдХреЛрдб рдлрд╛рдЗрд▓реЗрдВ рдХрд╣рд╛рдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВред
рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдореИрдВрдиреЗ .debug_info
рдЕрдиреБрднрд╛рдЧ рд╕реЗ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдкрдврд╝реА, рдЬрд┐рд╕рдореЗрдВ DWARF рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреАрдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕ ET рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХрд▓рди рд▓рд╛рдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП DWARF рдХреЗ рднреАрддрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдХрд▓рди рдЗрдХрд╛рдИ (ET) рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди -grecord-gcc-switches
рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред DWARF рд╣реА, рдореИрдВрдиреЗ libdwarf рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐ libble рдХреЗ рд╕рд╛рде рдмрдВрдбрд▓ рдореЗрдВ рдЖрддреА рд╣реИред DWARF рд╕реЗ рд╕рдВрдХрд▓рди рдХрдорд╛рдВрдб рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рд╣рдорд╛рд░реЗ рдИрдЯреА рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдордирд╛ рдХрд░ рджрд┐рдпрд╛:
- рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рдлреА рднрд╛рд░реА рд╣реИрдВ
- рдирд┐рд░реНрднрд░рддрд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде ~ 500 рдИрдЯреА рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдбреАрдбрдмреНрд▓реНрдпреВрдПрдЖрд░рдПрдл рдЖрд╡реЗрджрди рдХреЛ 10 рд╕реЗрдХрдВрдб рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрд╛
рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 10 рд╕реЗрдХрдВрдб рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ DWARF рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ compile_commands.json
рдХреЗ рддрд░реНрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ред рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ CMakeLists.txt set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
рдЬреЛрдбрд╝рдХрд░ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ рд╡рд╣ рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓ рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ
рдЪреВрдВрдХрд┐ рд╣рдордиреЗ DWARF рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмреАрдЪ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рдЙрдирдореЗрдВ include
рд╣реЛрдиреЗ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рдФрд░ рдЬреЛ рд╕рдВрдХрд▓рдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирддрд╛ рд╣реИ?
рдХреНрд▓реИрдВрдЧ рдФрд░ рдЬреАрд╕реАрд╕реА рдореЗрдВ рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдЬреЛ рддрдерд╛рдХрдерд┐рдд рдбрд┐рдкрдлрд╛рдЗрд▓реНрд╕ рдХреЛ рд▓рдЧрднрдЧ рдореБрдлреНрдд рдореЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рдлрд╛рдЗрд▓реЗрдВ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмреАрдЪ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдХ рдФрд░ рдирд┐рдВрдЬрд╛ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред Depfiles рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдкреНрд░рд╛рд░реВрдк рд╣реИ:
CMakeFiles/lib_efsw.dir/libs/efsw/src/efsw/DirectorySnapshot.cpp.o: \ /home/ddovod/_private/_projects/jet/live/libs/efsw/src/efsw/base.hpp \ /home/ddovod/_private/_projects/jet/live/libs/efsw/src/efsw/sophist.h \ /home/ddovod/_private/_projects/jet/live/libs/efsw/include/efsw/efsw.hpp \ /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/string \ /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/x86_64-linux-gnu/c++/7.3.0/bits/c++config.h \ /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/x86_64-linux-gnu/c++/7.3.0/bits/os_defines.h \ ...
рд╕рдВрдХрд▓рдХ рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдИрдЯреА рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣реИрд╢рдореИрдк рдореЗрдВ рдбрд╛рд▓реЗрдВред рдПрдХ рд╣реА 500 рдИрдЯреА рдХреЗ рд▓рд┐рдП рдХреБрд▓ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕рдВрдХрд▓рди compile_commands.json
+ depfiles 1 рд╕реЗрдХрдВрдб рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд▓реЗрддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рдВрдХрд▓рди рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рд╕рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрддрд░ рдкрд░ -MD
рдзреНрд╡рдЬ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдирд┐рдВрдЬрд╛ рд╕реЗ рдЬреБрдбрд╝реА рдПрдХ рд╕реВрдХреНрд╖реНрдорддрд╛ рд╣реИред рдпрд╣ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдЕрдкрдиреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП -MD
рдзреНрд╡рдЬ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ depfiles рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдирд┐рдВрдЬрд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ -d keepdepfile
рдзреНрд╡рдЬ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдореЗрдХ ( -MD
рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде) рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдХреЛ some_file.cpp.d
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдирд┐рдВрдЬрд╛ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ some_file.cpp.od
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕реНрдереИрддрд┐рдХ рдЪрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреЛрдб рд╣реИ (рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЙрджрд╛рд╣рд░рдг):
рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд veryUsefulFunction
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
int veryUsefulFunction(int value) { return value * 3; }
рдЬрдм рдирдП рдХреЛрдб рдХреЗ рд╕рд╛рде рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдкреБрди: рд▓реЛрдб рдХрд┐рдпрд╛ veryUsefulFunction
, рддреЛ рдмрд╣реБрдд veryUsefulFunction
рдЕрд▓рд╛рд╡рд╛, рд╕реНрдерд┐рд░ рдЪрд░ static Singleton ins;
, рдФрд░ Singletor::instance
рд╡рд┐рдзрд┐ред рдирддреАрдЬрддрди, рдХрд╛рд░реНрдпрдХреНрд░рдо рджреЛрдиреЛрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╕реНрдерд┐рд░ ins
рдХреЛ рдЕрднреА рддрдХ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдкрд░, Singleton
рдХреНрд▓рд╛рд╕ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдмреЗрд╢рдХ, рд╣рдо рдпрд╣ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдРрд╕реЗ рд╕рднреА рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдкреБрд░рд╛рдиреЗ рдХреЛрдб рд╕реЗ рдЗрдХрдЯреНрдареЗ рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЕрдкрдиреЗ рдЧрд╛рд░реНрдб рдЪрд░ рдХреЗ рд╕рд╛рде рдирдП рдХреЛрдб рдХреЗ рд╕рд╛рде рдЗрд╕ рдмрд╣реБрдд рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдкрд╛рддрд╛ рд╣реИред
рдПрдХ рд╕реВрдХреНрд╖реНрдо рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдЕрдШреБрд▓рдирд╢реАрд▓ рдХреНрд╖рдг рд╣реИред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд░реНрдЧ рд╣реИ:
class SomeClass { public: void calledEachUpdate() { m_someVar1++; } private: int m_someVar1 = 0; };
рдХрд╣рд╛ рдЬрд╛рддрд╛ calledEachUpdate
рд╡рд┐рдзрд┐ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 60 рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдПрдХ рдирдпрд╛ рдХреНрд╖реЗрддреНрд░ рдЬреЛрдбрд╝рдХрд░ рдмрджрд▓рддреЗ рд╣реИрдВ:
class SomeClass { public: void calledEachUpdate() { m_someVar1++; m_someVar2++; } private: int m_someVar1 = 0; int m_someVar2 = 0; };
рдпрджрд┐ рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдбрд╛рдпрдиреЗрдорд┐рдХ рдореЗрдореЛрд░реА рдореЗрдВ рдпрд╛ рд╕реНрдЯреИрдХ рдкрд░ рд╕реНрдерд┐рдд рд╣реИ, рддреЛ рдХреЛрдб рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЖрдмрдВрдЯрд┐рдд рдЖрд╡реГрддреНрддрд┐ рдореЗрдВ рдХреЗрд╡рд▓ рдЪрд░ m_someVar1
, рд▓реЗрдХрд┐рди рд░рд┐рдмреВрдЯ рдХреЗ рдмрд╛рдж, calledEachUpdate
рд╡рд┐рдзрд┐ calledEachUpdate
рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ m_someVar2
, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдХрд┐ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд░рд╛рдЬреНрдп рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рддрд░реНрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдЯрд╛ рджреЗрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рд░рд┐рдмреВрдЯ рдХреЗ рдмрд╛рдж рдПрдХ рдирдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдкреБрд╕реНрддрдХрд╛рд▓рдп onCodePreLoad
рдФрд░ onCodePostLoad
рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЖрд╡реЗрджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреИрд╕реЗ (рдФрд░ рдХреНрдпрд╛) рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдореИрдВ рд╕реЛрдЪреВрдВрдЧрд╛ред рдЕрдм рдпрд╣ рдорд╛рдорд▓рд╛ "рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рд╕рд╛рдорд╛рдиреНрдп" рдХреЗрд╡рд▓ рд╕реНрдерд┐рд░ рдЪрд░ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
void* oldVarPtr = ...; void* newVarPtr = ...; size_t oldVarSize = ...; size_t newVarSize = ...; memcpy(newVarPtr, oldVarPtr, std::min(oldVarSize, newVarSize));
рдпрд╣ рдмрд╣реБрдд рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬреЛ рдореИрдВ рд▓реЗрдХрд░ рдЖрдпрд╛ рд╣реВрдВред
рдирддреАрдЬрддрди, рдХреЛрдб рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ рдпрджрд┐ рд░рдирдЯрд╛рдЗрдо рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕реЗрдЯ рдФрд░ рд▓реЗрдЖрдЙрдЯ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИред рдпрд╣реА рдмрд╛рдд рдмрд╣реБрд░реВрдкреА рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред
рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛
рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
- рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╣реЗрдбрд░ рдкрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реА, рдкрд╛рд░реНрд╕ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рд╡рд░реНрдгред
- рдЗрд╕рдХреЗ рдмрд╛рдж, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдФрд░ рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ
compile_commands.json
рдлрд╝рд╛рдЗрд▓ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреА рд╣реИ, рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ ET рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рддреА рд╣реИред - рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрде рдХреЛ рдЬрд╛рдирддреЗ рд╣реБрдП, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИред
- рдЙрд╕рдХреЗ рдмрд╛рдж, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рднреА рд╕реНрд░реЛрдд рдХреЛрдб рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред
- рдЬрдм рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддреА рд╣реИ, рддреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦрддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╣реИрд╢рдореИрдк рдореЗрдВ рд╣реИ, рдФрд░ рдпрджрд┐ рд╡рд╣рд╛рдБ рд╣реИ, рддреЛ рд╕рдВрдХрд▓рд┐рдд рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдЙрдирдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдХрдИ рд╕рдВрдХрд▓рди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред
- рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ (рдореЗрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ, рд╕рдВрдпреЛрдЬрди
Ctrl+r
рдЗрд╕реЗ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ), рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдВрдХрд▓рди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рднреА рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред - рдЗрд╕ рд▓рд╛рдпрдмреНрд░реЗрд░реА рдХреЛ рддрдм
dlopen
рдлрд╝рдВрдХреНрд╢рди dlopen
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрддрд╛ рд╕реНрдерд╛рди рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред - рдкреНрд░рддреАрдХреЛрдВ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рднрд░реА рд╣реБрдИ рд╣реИ, рдФрд░ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдкреНрд░рддреАрдХреЛрдВ рдХреЗ рд╕реЗрдЯ рдХрд╛ рдкреВрд░рд╛ рдЪреМрд░рд╛рд╣рд╛ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рдпрд╛ рддреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдпрджрд┐ рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ) рдпрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд (рдпрджрд┐ рдпрд╣ рдПрдХ рд╕реНрдерд┐рд░ рдЪрд░ рд╣реИ)ред
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ред
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреА рдХрдореА рд╕реЗ рдмрд╣реБрдд рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдерд╛, рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ?
рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рдЖрд▓реЛрдЪрдирд╛ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА, рдзрдиреНрдпрд╡рд╛рдж!
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ