
* рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдбреЗрдореЛ рд╡реАрдбрд┐рдпреЛ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпреЗ рд╕рднреА рд▓реЛрдЧ рдХреНрдпрд╛ рд╣реИрдВ рдФрд░ рдХреМрди рд╣реИрдВ, рдореИрдВ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬреЛ рд╕реА ++ рдХреЛрдб рдХреЗ рдПрдХ рдЧрд░реНрдо рдкреБрдирдГ рд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ "рдХреЛрдб" рдХрд╛рд░реНрдп, рдбреЗрдЯрд╛ рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЙрдирдХреЗ рд╕рдордиреНрд╡рд┐рдд рдХрд╛рд░реНрдп рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ, рд╣рдо рдкреБрд░рд╛рдиреЗ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдирдП рдПрдХ рддрдХ рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдбреЗрдЯрд╛ (рд╕реНрдерд┐рд░ рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░) рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рдЕрд░реНрдерд╛рддреН рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рдХреЛрдб рдореЗрдВ рдЙрдирдХреЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рд░рдгрдиреАрддрд┐ рдХреЗ рд╕рд╛рдеред рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдпрд╣ рд░рдгрдиреАрддрд┐ рдмрд╣реБрдд рд╣реА рдЕрдирд╛рдбрд╝реА рдереА: рд╣рдо рдкреБрд░рд╛рдиреЗ рдХреЛрдб рд╕реЗ рд╕рднреА рд╕реНрдерд┐рд░ рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдирдП рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдирдП рдХреЛрдб, рдирдП рдЪрд░ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░рддреЗ рд╣реБрдП рдкреБрд░рд╛рдиреЗ рдХреЛрдб рд╕реЗ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред рдмреЗрд╢рдХ, рдпрд╣ рдЧрд▓рдд рд╣реИ, рдФрд░ рдЖрдЬ рд╣рдо рдПрдХ рд╕рд╛рде рдХрдИ рдЫреЛрдЯреА рд▓реЗрдХрд┐рди рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдХреЗ рдЗрд╕ рджреЛрд╖ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред
рд▓реЗрдЦ рдпрд╛рдВрддреНрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдкрд╛рддреНрд░ рдкрдврд╝рдирд╛ рдФрд░ рдПрд▓реНрдл рдФрд░ рдордЪ-рдУ рдлрд╛рдЗрд▓реЛрдВ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рдгред рдЬреЛрд░ рдЙрди рд╕реВрдХреНрд╖реНрдо рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдЬреЛ рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореЗрд░реЗ рдЬреИрд╕реЗ рдЬрд╡рд╛рдм рдХреЗ рд▓рд┐рдП рджреЗрдЦ рд░рд╣рд╛ рд╣реИред
рджрд┐рд▓
рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд░реНрдЧ рд╣реИ (рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЙрджрд╛рд╣рд░рдг, рдХреГрдкрдпрд╛ рдЙрдирдореЗрдВ рдЕрд░реНрде рди рджреЗрдЦреЗрдВ, рдХреЗрд╡рд▓ рдХреЛрдб рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ):
рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдПрдХ рд╕реНрдЯреИрдЯрд┐рдХ рд╡реЗрд░рд┐рдПрдмрд▓ред рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдо printDescription()
рд╡рд┐рдзрд┐ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
void Entity::printDescription() { std::cout << "DESCRIPTION: " << m_description << std::endl; }
рдХреЛрдб рд░реАрд▓реЛрдб рдХреЗ рдмрд╛рдж рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? Entity
рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдерд┐рд░ рдЪрд░ m_livingEntitiesCount
рднреА рдирдП рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред рдХреБрдЫ рднреА рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдЗрд╕ рдЪрд░ рдХреЗ рдорд╛рди рдХреЛ рдкреБрд░рд╛рдиреЗ рдХреЛрдб рд╕реЗ рдирдП рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирдП рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ, рдкреБрд░рд╛рдиреЗ рдХреЛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рддрд░реАрдХреЗ рдирдП рдХреЛрдб рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╣реИрдВред
C ++ рдмрд╣реБрдд рд▓рдЪреАрд▓рд╛ рдФрд░ рд╕рдореГрджреНрдз рд╣реИред рдФрд░ рдЬрдм рдлрд╛рдЙрд▓-рд╕реНрдореЗрд▓рд┐рдВрдЧ рдХреЛрдб рдкрд░ c ++ рд╕реАрдорд╛рдУрдВ рдореЗрдВ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рд▓рд╛рд▓рд┐рддреНрдп, рдореБрдЭреЗ рдпрд╣ рднрд╛рд╖рд╛ рдкрд╕рдВрдж рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ rtti рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдЗрд╕реА рд╕рдордп, рдЖрдкрдХреЛ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде Any
рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
class Any { public: template <typename T> explicit Any(T&& value) { ... } template <typename T> bool is() const { ... } template <typename T> T& as() { ... } };
рд╣рдо рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдПрдВрдЧреЗред рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдХрд▓рд┐рдд рдорд╛рдирдЪрд┐рддреНрд░рдг (рд╕рдВрдХрд▓рд┐рдд-рд╕рдордп рдЗрдХрд╛рдИ) рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЪрд░ рдХреЗ рдорд╛рди рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, uint64_t
(рд░рдирдЯрд╛рдЗрдо рдЗрдХрд╛рдИ), рдпрд╛рдиреА "рдЧрдгрдирд╛" рдкреНрд░рдХрд╛рд░ред Rtti рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, type_info
рдФрд░, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд, type_index рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрд░рдЯреАрдЖрдИ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдХ (рдпрд╛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди?) рдХреНрдпрд╛ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╣реИ:
template <typename T> uint64_t typeId() { static char someVar; return reinterpret_cast<uint64_t>(&someVar); }
рддрдм Any
рд╡рд░реНрдЧ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
class Any { public: template <typename T> explicit Any(T&& value) : m_typeId(typeId<std::decay<T>::type>())
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреНрд░рдорд╢рдГ 1 рдмрд╛рд░ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрд░рдорд╢рдГ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЕрдкрдирд╛ рд╕реНрдерд┐рд░ рдЪрд░ рд╣реЛрдЧрд╛, рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ рдЕрдиреВрдард╛ рдкрддрд╛ рд╣реЛрдЧрд╛ред рдЬрдм рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдХреЙрд▓ рдХреЛ рдирдП рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдирдП рдХрд╛ рдЕрдкрдирд╛ рд╕реНрдЯреИрдЯрд┐рдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рд╣реЛрдЧрд╛ (рд╣рдордиреЗ рд╡реИрд▓реНрдпреВ рдФрд░ рдЧрд╛рд░реНрдб рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдХреЙрдкреА рдХрд┐рдпрд╛)ред рд▓реЗрдХрд┐рди рд╣рдо рдЕрд░реНрде рдореЗрдВ рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рд╣рдо рдХреЗрд╡рд▓ рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдирдП рдЪрд░ рдХрд╛ рдкрддрд╛ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдбреЗрдЯрд╛ рдЕрд╕рдВрдЧрдд рд╣реЛ рдЧрдпрд╛: Any
рд╡рд░реНрдЧ рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд░реНрдорд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдкреБрд░рд╛рдиреЗ рд╕реНрдерд┐рд░ рдЪрд░ рдХрд╛ рдкрддрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ is()
рд╡рд┐рдзрд┐ рдирдП рдХреЗ рдкрддреЗ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдЧреА рдФрд░ "рдпрд╣ рдЕрдм Any
рд╕рдорд╛рди рдирд╣реАрдВ Any
" ┬йред
рдпреЛрдЬрдирд╛
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рд╕рдордЭрджрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Google рдкрд░ рдХреБрдЫ рд╢рд╛рдореЗрдВ рдмрд┐рддрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдкреНрд░рд▓реЗрдЦрди, рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдПрдкреА рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпреЛрдЬрдирд╛ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдмрдиреА:
- рдирдпрд╛ рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд░рд┐рд▓реЛрдХреЗрд╢рди рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред
- рдЗрди рд╕реНрдерд╛рдирд╛рдВрддрд░рдгреЛрдВ рд╕реЗ рд╣рдореЗрдВ рдХреЛрдб рдореЗрдВ рд╕рднреА рд╕реНрдерд╛рди рдорд┐рд▓рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдереИрддрд┐рдХ (рдФрд░ рдХрднреА-рдХрднреА рд╡реИрд╢реНрд╡рд┐рдХ) рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
- рдЪрд░реЛрдВ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдкрддреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдкрддреЗ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирдП рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдкреВрд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдкрддреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ред рд╡рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред
рд╕реНрдерд╛рди рдкрд░рд┐рд╡рд░реНрддрди
рдЬрдм рдХрдВрдкрд╛рдЗрд▓рд░ рдорд╢реАрди рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЪрд░ рдХреЛ рдХрдИ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рдЪрд░ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрддрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╛ рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдЪрд░ рдХрд╛ рдкрддрд╛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рднреА рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рддреБрд░рдВрдд рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрддреЗ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рд╡рд╣ рдЗрд╕ рдкрддреЗ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд╛рд░реНрдп рдФрд░ рдЪрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ, рдЕрдВрдд рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдХреЗ рджреМрд░рд╛рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрддреЗ рдкрд░ рд▓реЛрдб рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИ:
- рдХрд┐рд╕ рдкрддреЗ рдкрд░ рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдЪрд░ рдХрд╛ рдкрддрд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
- рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдЪрд░ рдХрд╛ рдкрддрд╛
- рд╡рд╣ рд╕реВрддреНрд░ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдкрддреЗ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП
- рдЗрд╕ рдкрддреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреЗ рдмрд╛рдЗрдЯ рдЖрд░рдХреНрд╖рд┐рдд рд╣реИрдВ
рд╡рд┐рднрд┐рдиреНрди рдУрдПрд╕ рдореЗрдВ, рд░рд┐рд▓реЛрдХреЗрд╢рди рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░реВрдк рд╕реЗ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рд╡реЗ рд╕рднреА рдПрдХ рд╣реА рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрд▓реНрдл (рд▓рд┐рдирдХреНрд╕) рдореЗрдВ, рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╡рд┐рд╢реЗрд╖ .rela
рд╡рд░реНрдЧреЛрдВ (32-рдмрд┐рдЯ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдпрд╣ .rel
) рдореЗрдВ рд╕реНрдерд┐рдд .rel
, рдЬреЛ рдЙрд╕ рдкрддреЗ рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╛рдЧ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, .rela.text
- рд╡рд╣ рдЦрдВрдб рдЬрд┐рд╕рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╕реНрдерд┐рдд рд╣реИрдВред .text
рдЕрдиреБрднрд╛рдЧ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ), рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЙрд╕ рдкреНрд░рддреАрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдкрддрд╛ рдЖрдк рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╕реНрдерд▓ рдкрд░ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдордЪ-рдУ (macOS) рдореЗрдВ, рд╡рд┐рдкрд░реАрдд рд╕реНрдерд┐рддрд┐ рд╣реИ; рд░рд┐рд▓реЛрдХреЗрд╢рдиреНрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрд▓рдЧ рд╕реЗрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ; рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдХреНрд╢рди рдореЗрдВ рд░рд┐рд▓реЛрдХреЗрд╢рдиреНрд╕ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдПрдХ рд░рд┐рд▓реЗрд╢рдирд▓ рд╕рд┐рдВрдмрд▓ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реЛрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕реЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП ( -fPIC
рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде):
int globalVariable = 10; int veryUsefulFunction() { static int functionLocalVariable = 0; functionLocalVariable++; return globalVariable + functionLocalVariable; }
рдХрдВрдкрд╛рдЗрд▓рд░ рд▓рд┐рдирдХреНрд╕ рдкрд░ рд░рд┐рд▓реЛрдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рд╕реЗрдХреНрд╢рди рдмрдирд╛рдПрдЧрд╛:
Relocation section '.rela.text' at offset 0x1a0 contains 4 entries: Offset Info Type Symbol's Value Symbol's Name + Addend 0000000000000007 0000000600000009 R_X86_64_GOTPCREL 0000000000000000 globalVariable - 4 000000000000000d 0000000400000002 R_X86_64_PC32 0000000000000000 .bss - 4 0000000000000016 0000000400000002 R_X86_64_PC32 0000000000000000 .bss - 4 000000000000001e 0000000400000002 R_X86_64_PC32 0000000000000000 .bss - 4
рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рддрд╛рд▓рд┐рдХрд╛ macOS рдкрд░:
RELOCATION RECORDS FOR [__text]: 000000000000001b X86_64_RELOC_SIGNED __ZZ18veryUsefulFunctionvE21functionLocalVariable 0000000000000015 X86_64_RELOC_SIGNED _globalVariable 000000000000000f X86_64_RELOC_SIGNED __ZZ18veryUsefulFunctionvE21functionLocalVariable 0000000000000006 X86_64_RELOC_SIGNED __ZZ18veryUsefulFunctionvE21functionLocalVariable
рдФрд░ рдпрд╣рд╛рдБ (рд▓рд┐рдирдХреНрд╕ рдкрд░ veryUsefulFunction()
рдлрд╝рдВрдХреНрд╢рди рдмрд╣реБрдд veryUsefulFunction()
:
0000000000000000 <_Z18veryUsefulFunctionv>: 0: 55 push rbp 1: 48 89 e5 mov rbp,rsp 4: 48 8b 05 00 00 00 00 mov rax,QWORD PTR [rip+0x0] b: 8b 0d 00 00 00 00 mov ecx,DWORD PTR [rip+0x0] 11: 83 c1 01 add ecx,0x1 14: 89 0d 00 00 00 00 mov DWORD PTR [rip+0x0],ecx 1a: 8b 08 mov ecx,DWORD PTR [rax] 1c: 03 0d 00 00 00 00 add ecx,DWORD PTR [rip+0x0] 22: 89 c8 mov eax,ecx 24: 5d pop rbp 25: c3 ret
рдФрд░ рдЗрд╕рд▓рд┐рдП рд╡рд╕реНрддреБ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж:
00000000000010e0 <_Z18veryUsefulFunctionv>: 10e0: 55 push rbp 10e1: 48 89 e5 mov rbp,rsp 10e4: 48 8b 05 05 21 00 00 mov rax,QWORD PTR [rip+0x2105] 10eb: 8b 0d 13 2f 00 00 mov ecx,DWORD PTR [rip+0x2f13] 10f1: 83 c1 01 add ecx,0x1 10f4: 89 0d 0a 2f 00 00 mov DWORD PTR [rip+0x2f0a],ecx 10fa: 8b 08 mov ecx,DWORD PTR [rax] 10fc: 03 0d 02 2f 00 00 add ecx,DWORD PTR [rip+0x2f02] 1102: 89 c8 mov eax,ecx 1104: 5d pop rbp 1105: c3 ret
4 рдЬрдЧрд╣реЗрдВ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ 4 рдмрд╛рдЗрдЯреНрд╕ рдЕрд╕рд▓реА рдЪрд░ рдХреЗ рдкрддреЗ рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рд╣реИрдВред
рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░, рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХрд╛ рд╕реЗрдЯ рдЖрдкрдХрд╛ рдЕрдкрдирд╛ рд╣реИред рд▓рд┐рдирдХреНрд╕ рдкрд░ x86-64 рдкрд░, 40 рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг ред рд╡рд╣рд╛рдБ x86-64 рдкрд░ macOS рдкрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ 9 рд╣реИрдВред рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рдгреЛрдВ рдХреЛ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ 2 рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рд▓рд┐рдВрдХ-рдЯрд╛рдЗрдо рд░рд┐рд▓реЛрдХреЗрд╢рди - рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╛рдЗрд▓ рдХреЛ рдПрдЧреНрдЬреАрдХреНрдпреВрдЯреЗрдмрд▓ рдлрд╛рдЗрд▓ рдпрд╛ рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд░рд┐рд▓реЛрдХреЗрд╢рди
- рд▓реЛрдб-рдЯрд╛рдЗрдо рд░рд┐рд▓реЛрдХреЗрд╢рди - рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд╕рдордп рд░рд┐рд▓реЛрдХреЗрд╢рди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рджреВрд╕рд░реЗ рд╕рдореВрд╣ рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЪрд░ рдХреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЬрдм рд╕рднреА рдЧрддрд┐рд╢реАрд▓ рд░рд┐рд▓реЛрдХреЗрд╢рди (рдЧреНрд▓реЛрдмрд▓ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рд░рд┐рд▓реЛрдХреЗрд╢рди рд╕рд╣рд┐рдд) рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд╛рдпрдирд╛рдорд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд▓рд┐рдВрдХрд░ рд╕рднреА рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд▓рд╛рдЗрдмреНрд░реЗрд░рд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░рддреАрдХреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдЦреЛрдЬрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рдкрд╣рд▓реЗ рдлрд░реНрд╕реНрдЯ рд╕рд┐рдВрдмрд▓ рдХреЗ рдПрдбреНрд░реЗрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд░рд┐рд▓реЛрдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрди рд╕реНрдерд╛рдирд╛рдВрддрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ; рд▓рд┐рдВрдХрд░ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рд╕реЗ рдЪрд░ рдХреЛ рд╕реНрд╡рдпрдВ рдвреВрдВрдв рд▓реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЖ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕ рдЪрд░ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЕрдирджреЗрдЦреА рдХрд░рддреЗ рд╣реБрдП рдирдП рдХреЛрдб рдореЗрдВ рдЕрдкрдирд╛ рдкрддрд╛ рдмрджрд▓ рджреЗрдЧрд╛ред
MacOS рдФрд░ рдЗрд╕рдХреЗ рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд┐рдВрдХрд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рдПрдХ рд╕реВрдХреНрд╖реНрдо рдмрд┐рдВрджреБ рд╣реИред MacOS рддрдерд╛рдХрдерд┐рдд рджреЛ-рд╕реНрддрд░реАрдп рдирд╛рдорд╕реНрдерд╛рди рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдХрдареЛрд░ рд╣реИ, рддреЛ рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рд▓рд┐рдВрдХрд░ рдкрд╣рд▓реЗ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╡рд░реНрдгреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░реЗрдЧрд╛, рдФрд░ рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛, рддреЛ рдпрд╣ рджреВрд╕рд░реЛрдВ рдореЗрдВ рдЦреЛрдЬ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдЬрд▓реНрджреА рд╕реЗ рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдВ, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рддрд╛рд░реНрдХрд┐рдХ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░рд╛ рдкреНрд░рд╡рд╛рд╣ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, -flat_namespace
рдкрд░ ld рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдзреНрд╡рдЬ рд╣реИ - -flat_namespace
, рдФрд░ рдпрджрд┐ рдЖрдк рдЗрд╕ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд░реНрдг рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдЗрд╕рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред
рдкрд╣рд▓реЗ рд╕рдореВрд╣ рдореЗрдВ рд╕реНрдереИрддрд┐рдХ рдЪрд░ рдХреЗ рд░рд┐рд▓реЛрдХреЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрдВ рдЬреЛ рдЪрд╛рд╣рд┐рдПред рдПрдХрдорд╛рддреНрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╕рдВрдХрд▓рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдВрдХрд░ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЙрди рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдкрдврд╝реЗрдВрдЧреЗ, рдЬрд┐рдирд╕реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рднреА рд╕реАрдорд┐рдд рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд┐рддрд┐-рдирд┐рд░реНрднрд░ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╣рдо рдЕрдкрдирд╛ рдХреЛрдб PIC рдореЛрдб (рдкреЛрдЬреАрд╢рди-рдЗрдВрдбрд┐рдкреЗрдВрдбреЗрдВрдЯ рдХреЛрдб) рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд░рд┐рд▓реЛрдХреЗрд╢рди рдХреЗрд╡рд▓ рд╕рд╛рдкреЗрдХреНрд╖ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреБрд▓ рд░рд┐рд▓реЛрдХреЗрд╢рди рдЬреЛ рд╣рдореЗрдВ рд░реВрдЪрд┐ рджреЗрддреЗ рд╣реИрдВ:
- рд▓рд┐рдирдХреНрд╕ рдкрд░
.rela.text
рд╕реЗрдХреНрд╢рди рдФрд░ __text
рдкрд░ __text
рд╕реЗрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рд░рд┐рд▓реЛрдХреЗрд╢рди, рдФрд░ - рдЬреЛ рд▓рд┐рдирдХреНрд╕ рдФрд░
__data
, __bss
рдФрд░ рдореИрдХ рдкрд░ __common
, рдФрд░ - рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдкреНрд░рдХрд╛рд░
R_X86_64_PC32
рдФрд░ R_X86_64_PC64
рд▓рд┐рдирдХреНрд╕ рдкрд░ рдФрд░ X86_64_RELOC_SIGNED
, X86_64_RELOC_SIGNED_1
, X86_64_RELOC_SIGNED_2
рдФрд░ X86_64_RELOC_SIGNED_4
ред
рд╕реВрдХреНрд╖реНрдо рдмрд┐рдВрджреБ __common
рдЕрдиреБрднрд╛рдЧ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рднреА рдПрдХ рд╕рдорд╛рди *COM*
рд╕реЗрдХреНрд╢рди рд╣реИред рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдЗрд╕ рдЦрдВрдб рдореЗрдВ рдЖ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди, рдЬрдм рдореИрдВрдиреЗ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛, рддреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреА рддрд░рд╣, *COM*
рдЕрдиреБрднрд╛рдЧ рд╕реЗ рдЪрд░рд┐рддреНрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╣рдореЗрд╢рд╛ рдЧрддрд┐рд╢реАрд▓ рдереЗред рдЙрд╕реА рд╕рдордп, macOS рдкрд░ рдРрд╕реЗ рд╡рд░реНрдг рдХрднреА-рдХрднреА рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рдереЗ рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд╡рд░реНрдг рдПрдХ рд╣реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реЛрдВред рдЗрд╕рд▓рд┐рдП, macOS рдкрд░ рд╡рд░реНрдгреЛрдВ рдФрд░ рд░рд┐рд▓реЛрдХреЗрд╢рди рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп рдЗрд╕ рдЦрдВрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдЦреИрд░, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрди рд╕рднреА рд░рд┐рд▓реЛрдХреЗрд╢рдиреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ, рдЙрдирдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ? рдпрд╣рд╛рдБ рддрд░реНрдХ рд╕рд░рд▓ рд╣реИред рдЬрдм рд▓рд┐рдВрдХрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдкрддреЗ рдкрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдкреНрд░рддреАрдХ рдХреЗ рдкрддреЗ рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИред рджреЛрдиреЛрдВ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рд╣рдорд╛рд░реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдПрдХ рд╢рдмреНрдж рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддреАрдХ рдХрд╛ рдкрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рджрд░реНрдЬ рдЧрдгрдирд╛ рдХрд╛ рд░реВрдк рд╣реИ:
resultAddr = newVarAddr + addend - relocAddr
рдЙрд╕реА рд╕рдордп, рд╣рдо рдЪрд░ рдХреЗ рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдкрддреЗ рдЬрд╛рдирддреЗ рд╣реИрдВ - рдкреБрд░рд╛рдиреЗ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд╡реЗрджрди рдореЗрдВ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ, рдФрд░ рдирдПред рд╕реВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рдмрджрд▓рдирд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╢реЗрд╖ рд╣реИ:
resultAddr = resultAddr - newVarAddr + oldVarAddr
рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдкрддреЗ рдкрд░ рд▓рд┐рдЦреЗрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рдирдП рдХреЛрдб рдореЗрдВ рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдЪрд░ рдХреЗ рдореМрдЬреВрджрд╛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдирдП рдЪрд░ рдмрд╕ рдЭреВрда рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП! рд▓реЗрдХрд┐рди рдПрдХ рд╕реВрдХреНрд╖реНрдо рдмрд┐рдВрджреБ рд╣реИред
рдирдП рдХреЛрдб рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛
рдЬрдм рд╕рд┐рд╕реНрдЯрдо рдбрд╛рдпрдирд╛рдорд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рдореЗрдВ рдХрд╣реАрдВ рднреА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред рдореЗрд░реЗ рдЙрдмрдВрдЯреВ 18.04 рдкрд░, рдЖрд╡реЗрджрди 0x00400000
рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ 0x00400000
, рдФрд░ 0x7fd3829bd000
рдХреНрд╖реЗрддреНрд░ рдХреЗ рдкрддреЗ рдкрд░ ld-2.27.so
рдареАрдХ рдмрд╛рдж рд╣рдорд╛рд░реА рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реАред рдХрд╛рд░реНрдпрдХреНрд░рдо рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдбрд╛рдЙрдирд▓реЛрдб рдкрддреЛрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдЙрд╕ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИ рдЬреЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд 32-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдЧреАред рдФрд░ рд▓рд┐рдВрдХ-рдЯрд╛рдЗрдо рд░рд┐рд▓реЛрдХреЗрд╢рди рдореЗрдВ, рд▓рдХреНрд╖реНрдп рдкрд╛рддреНрд░реЛрдВ рдХреЗ рдкрддреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 4 рдмрд╛рдЗрдЯреНрд╕ рдЖрд░рдХреНрд╖рд┐рдд рд╣реИрдВред
рд╕рдВрдХрд▓рдХ рдФрд░ -mcmodel=large
рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдзреВрдореНрд░рдкрд╛рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ -mcmodel=large
рд╡рд┐рдХрд▓реНрдк рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдпрд╣ рд╕рдВрдХрд▓рдХ рдХреЛ рд╡рд░реНрдгреЛрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рдзрд╛рд░рдгрд╛ рдХреЗ рдмрд┐рдирд╛ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рднреА рдкрддреЗ 64-рдмрд┐рдЯ рдХреЗ рдорд╛рди рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдХрд▓реНрдк PIC рдХреЗ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ -mcmodel=large
-fPIC
рд╕рд╛рде -mcmodel=large
рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо -fPIC
рдкрд░ред рдореБрдЭреЗ рдЕрднреА рднреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ, рд╢рд╛рдпрдж macOS рдкрд░ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдирд╣реАрдВ рд╣реИрдВред
рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рдиреАрдЪреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рдереЛрдВ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рд╕реНрдерд╛рди рдХреЗ рдкрд╛рд╕ рдЖрднрд╛рд╕реА рдореЗрдореЛрд░реА рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВ, рдЬреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдлрд┐рд░ рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╣рд╛рдереЛрдВ рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрд╡рд╢реНрдпрдХ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдкреГрд╖реНрдареЛрдВ рдХреЗ рд╕рд╛рде рдореЗрдореЛрд░реА рдкреЗрдЬ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рднреА рд░рд┐рд▓реЛрдХреЗрд╢рди рд╣рд╛рдереЛрдВ рд╕реЗ рдЕрдирдЬрд╝рд┐рдк рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдкреИрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЖрд▓рд╕реА рд╣реВрдБред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓реЛрдб-рдЯрд╛рдЗрдо рд░рд┐рд▓реЛрдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЦрд╛рд╕рдХрд░ рд▓рд┐рдирдХреНрд╕ рдкрд░ред рдФрд░ рдХреНрдпреЛрдВ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд▓рд┐рдВрдХрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ? рдЖрдЦрд┐рд░рдХрд╛рд░, рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ рдореИрдВ рдЬрд┐рддрдирд╛ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирддрд╛ рд╣реИред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдХрд▓реНрдк рдорд┐рд▓реЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдХрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ:
- Apple ld:
-image_base 0xADDRESS
- LLVM lld:
--image-base=0xADDRESS
- GNU ld:
-Ttext-segment=0xADDRESS
рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд╕рдордп рдпреЗ рд╡рд┐рдХрд▓реНрдк рд▓рд┐рдВрдХрд░ рдХреЛ рджрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред 2 рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рд╣реИрдВред
рдкрд╣рд▓рд╛ GNU ld рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд╕рдордп, рдЬрд┐рд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣рдо рдЗрд╕реЗ рд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡рд╣ рдореБрдХреНрдд рдерд╛
- рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрддрд╛ рдкреГрд╖реНрда рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ рдмрд╣реБ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (x86-64 рд▓рд┐рдирдХреНрд╕ рдФрд░
0x1000
рдпрд╣ 0x1000
) - рдХрдо рд╕реЗ рдХрдо рд▓рд┐рдирдХреНрд╕ рдкрд░, рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрддрд╛
PT_LOAD
рдЦрдВрдб рдХреЗ рд╕рдВрд░реЗрдЦрдг рдХрд╛ рдПрдХ PT_LOAD
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдпрд╣реА рд╣реИ, рдпрджрд┐ рд▓рд┐рдВрдХрд░ рдиреЗ рд╕рдВрд░реЗрдЦрдг рдХреЛ 0x10000000
рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп 0x10001000
рдкрддреЗ рдкрд░ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдкрддрд╛ рдкреГрд╖реНрда рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛред рдпрджрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рд╢рд░реНрдд рдкреВрд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп "рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣" рд▓реЛрдб рд╣реЛрдЧрд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ GNU ld 2.30 рд╣реИ, рдФрд░, LLVM lld рдХреЗ рд╡рд┐рдкрд░реАрдд, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ PT_LOAD
рдЦрдВрдб рдХреЗ рд╕рдВрд░реЗрдЦрдг рдХреЛ PT_LOAD
рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЪрд┐рддреНрд░ рд╕реЗ рдмрд╣реБрдд рдмрд╛рд╣рд░ рд╣реИред рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП -Ttext-segment=...
рд╡рд┐рдХрд▓реНрдк рдХреЗ рдЕрд▓рд╛рд╡рд╛, -Ttext-segment=...
-z max-page-size=0x1000
ред рдореИрдВрдиреЗ рдПрдХ рджрд┐рди рдмрд┐рддрд╛рдпрд╛ рдЬрдм рддрдХ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рдирд╣реАрдВ рд╣реБрдЖ рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╡рд╣рд╛рдВ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рджреВрд╕рд░реА рдХрдард┐рдирд╛рдИ - рдбрд╛рдЙрдирд▓реЛрдб рдкрддрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдВрдХрд┐рдВрдЧ рдЪрд░рдг рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд▓рд┐рдирдХреНрд╕ рдореЗрдВ, рдпрд╣ рдЫрджреНрдо рдлрд╛рдЗрд▓ /proc/<pid>/maps
рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдирд┐рдХрдЯрддрдо рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рдЯреБрдХрдбрд╝рд╛ рдвреВрдВрдвреЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд┐рдЯ рд╣реЛрдЧреА, рдФрд░ рд▓рд┐рдВрдХ рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рднрд╡рд┐рд╖реНрдп рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рджреЗрдЦрдХрд░, рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдХреЗ рдФрд░ рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдХреЗ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рд╕рдЯреАрдХ рд╕рдВрдЦреНрдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдорд╛рд░реНрдЬрд┐рди рдХреЗ рд╕рд╛рде рдЕрдиреБрдорд╛рдирд┐рдд рдЖрдХрд╛рд░ред
MacOS рдореЗрдВ /proc/*
; рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк vmmap
рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред vmmap -interleaved <pid>
рдХрдорд╛рдВрдб рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╕рдорд╛рди рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдЬреИрд╕реЗ рдХрд┐ proc/<pid>/maps
ред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдПрдХ рдФрд░ рдореБрд╢реНрдХрд┐рд▓ рдЦрдбрд╝реА рд╣реЛ рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдХреЛрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рдмрдЪреНрдЪрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ <pid>
рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рддрдВрдЧ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, vmmap
рдЕрдкрдиреА рдореЗрдореЛрд░реА рдореИрдкрд┐рдВрдЧ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░реЛрдХ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдХреЙрд▓рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЧрд▓рдд рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реНрд▓реИрдЧ- -forkCorpse
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ vmmap
рд╣рдорд╛рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдПрдХ рдЦрд╛рд▓реА рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛ рд╕рдХреЗ, рдЙрд╕рдореЗрдВ рд╕реЗ рдореИрдкрд┐рдВрдЧ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдЙрд╕реЗ рдорд╛рд░ рджреЗрдВ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рд╡реНрдпрд╡рдзрд╛рди рди рд╣реЛред
рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд╣рдо рд╕рднреА рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛
рдЗрди рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд╕рд╛рде, рдЕрдВрддрд┐рдо рдХреЛрдб рдкреБрдирдГ рд▓реЛрдб рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
- рдирдП рдХреЛрдб рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ
- рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВ
- рдкрдврд╝рдирд╛ рдкреБрдирд░реНрд╡рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ
- рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА рдХреЗ рдПрдХ рдирд┐рд╢реБрд▓реНрдХ рдЯреБрдХрдбрд╝реЗ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
- рд╣рдо рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ,
dlopen
рдорд╛рдзреНрдпрдо рд╕реЗ dlopen
- рд▓рд┐рдВрдХ-рдЯрд╛рдЗрдо рд░рд┐рд▓реЛрдХреЗрд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреИрдЪ рдХреЛрдб
- рдкреИрдЪ рд╕рдорд╛рд░реЛрд╣
- рд╕реНрдерд┐рд░ рдЪрд░ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ рдЬреЛ рдЪрд░рдг 6 рдореЗрдВ рднрд╛рдЧ рдирд╣реАрдВ рд▓реЗрддреЗ рдереЗ
рдХреЗрд╡рд▓ рд╕реНрдЯреИрдЯрд┐рдХ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдЧрд╛рд░реНрдб рдЪрд░ рдЪрд░рдг 8 рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬрд┐рд╕рд╕реЗ рд╕реНрд╡рдпрдВ рд╕реНрдЯреИрдЯрд┐рдХ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ "рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди" рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЪреВрдБрдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рднреА рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рдирд╣реАрдВ рд╣реИ, рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдмрд╛рдд рдпрд╣ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдпрджрд┐ рдирдпрд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЕрдЧрд▓рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрдореГрддрд┐ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдЧрд▓рддреА рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдкрддреЗ рдкрд░ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдбрд┐рдмрдЧ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкреБрдирд░рд╛рд░рдВрдн рд╣реИред рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╕рдордп, рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдХреЛрдб рд╡рд╛рд▓реА 31 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрджрд▓реЗ рдореЗрдВ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИрдВред
рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ 3 рдФрд░ рд╡рдЬрд╝рдирджрд╛рд░ рдЯреБрдХрдбрд╝реЗ рдЧрд╛рдпрдм рд╣реИрдВ:
- рдЕрдм рдирдП рдХреЛрдб рд╡рд╛рд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдЕрдиреНрдп рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдХреЛрдб рдЬреЛ рдЕрднреА рддрдХ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕рдореЗрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдиреБрд╡рд╛рдж рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреЛ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдирдП рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
- рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рд░реАрд▓реЛрдбрд┐рдВрдЧ рдХреЛрдб рдЕрднреА рднреА рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ (рдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЗ рд╕рд╛рде рдЖрдк рдХреЗрд╡рд▓ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд░рди рдереНрд░реВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд╕реА рдереНрд░реЗрдб рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ)ред рдирд┐рд░реНрдзрд╛рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдкреИрдЪрд┐рдВрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╕рднреА рдереНрд░реЗрдбреНрд╕, рдкреИрдЪ рдХреЗ рд╕рд╛рде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░реЛрдХрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдХрд╛рдо рдкрд░ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред
- рдХреЛрдб рдкреБрдирдГ рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЖрдХрд╕реНрдорд┐рдХ рдЖрд╡реЗрджрди рджреБрд░реНрдШрдЯрдирд╛ рдХреА рд░реЛрдХрдерд╛рдоред рдХреЛрдб рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЧрд▓рддреА рд╕реЗ рдирдП рдХреЛрдб рдореЗрдВ рдЕрдорд╛рдиреНрдп рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреАред рдХрд╛рд▓реЗ рдЬрд╛рджреВ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рдореИрдВ рдЕрднреА рднреА рд╡рд┐рдЪрд╛рд░ рдореЗрдВ рд╣реВрдБред
рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЗ рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдпрд╣ рдореЗрд░реА рдореБрдЦреНрдп рдиреМрдХрд░реА рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЗрд╕рдХреА рдЖрджрдд рдереЛрдбрд╝реА рдкрдбрд╝рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдбрд╝рд╛рди рд╕рд╛рдорд╛рдиреНрдп рд╣реИред
рдЕрдЧрд░ рдореБрдЭреЗ рдпреЗ рддреАрди рдмрд┐рдВрджреБ рдорд┐рд▓рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рдорд┐рд▓рддреА рд╣реИрдВ, рддреЛ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ред
рдбреЗрдореЛ
рдЪреВрдВрдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдордХреНрдЦреА рдкрд░ рдирдИ рдкреНрд░рд╕рд╛рд░рдг рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯрд╛ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдмреНрд░рд╣реНрдорд╛рдВрдб рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рд╢реВрдЯрд┐рдВрдЧ рд╡рд░реНрдЧ рдХреНрд╖реБрджреНрд░рдЧреНрд░рд╣реЛрдВ рдХреА рдЬреБрддрд╛рдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рд░рд▓ рд╕рд░рд▓ рдЦреЗрд▓ рд▓рд┐рдЦрддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ "рдСрд▓ рдЗрди рд╡рди рдлрд╛рдЗрд▓" рдХреА рд╢реИрд▓реА рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА, рд▓реЗрдХрд┐рди рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ, рдЕрд▓рдорд╛рд░рд┐рдпреЛрдВ рдкрд░ рд╕рдм рдХреБрдЫ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛, рдЬрд┐рд╕рд╕реЗ рдХрдИ рдЫреЛрдЯреА рдлрд╛рдЗрд▓реЗрдВ рдкреИрджрд╛ рд╣реЛрддреА рд╣реИрдВ (рдЗрд╕рд▓рд┐рдП, рдЗрддрдирд╛ рд╕реНрдХреНрд░рд┐рдмрд▓ рдмрд╛рд╣рд░ рдЖрдпрд╛)ред рдмреЗрд╢рдХ, рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреНрд░рд╛рдЗрдВрдЧ, рдЗрдирдкреБрдЯ, рд╡рд┐рдВрдбреЛ рдФрд░ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЦреЗрд▓ рдХрд╛ рдХреЛрдб рдЦрд░реЛрдВрдЪ рд╕реЗ рд╣реА рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред
рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ - рдореИрдВрдиреЗ рдХреЗрд╡рд▓ 3 рдмрд╛рд░ рдЖрд╡реЗрджрди рдЪрд▓рд╛рдпрд╛: рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЬрдм рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЦрд╛рд▓реА рджреГрд╢реНрдп рдерд╛, рдФрд░ рдореЗрд░реА рд▓рд╛рдкрд░рд╡рд╛рд╣реА рдХреЗ рдХрд╛рд░рдг рдЧрд┐рд░рдиреЗ рдХреЗ рдмрд╛рдж 2 рдмрд╛рд░ред рдкреВрд░рд╛ рдЦреЗрд▓ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдмрдврд╝рд╛-рдЪрдврд╝рд╛рдХрд░ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп - рд▓рдЧрднрдЧ 40 рдорд┐рдирдЯред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рдЖрд▓реЛрдЪрдирд╛ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА, рдзрдиреНрдпрд╡рд╛рдж!
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ