рднрд╛рдЧ 0. рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдпреЛрдЧрд┐рдиреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╕рдВрднрд╡ рд╣реИ

рд╕рд╛рд╡рдзрд╛рдиреА: рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╣реИред рд╣рд╛рдВ, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЗрд╕рдореЗрдВ рдХреБрдЫ рдФрд░ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред


рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рдлрдВрддрд╛рд╕реА рдЦреЗрд▓ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдХрд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЦреИрд░, рд╡рд╣рд╛рдБ рдХрд▓реНрдкрд┐рдд рдмреМрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдФрд░ рдЖрднрд╛рд╕реА рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдмрдЪрдкрди рд╕реЗ, рдЖрдкрдиреЗ рдРрд╕рд╛ рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рдкрдирд╛ рджреЗрдЦрд╛ рдерд╛ рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╣рд┐рдЪрдХрд┐рдЪрд╛рд╣рдЯ рдХреЗ рд╕рд╣рдордд рдереЗред рдЬрд▓реНрдж рд╣реА, рдЖрдкрдХреЛ рдПрд╣рд╕рд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬреНрдпрд╛рджрд╛рддрд░ рдкреБрд░рд╛рдиреЗ рдмрд╢реАрд░рдШ рдФрд░ рдЕрдиреНрдп рд╡рд┐рд╡рд╛рджрд┐рдд рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдЪреБрдЯрдХреБрд▓реЛрдВ рдХреА рджреБрдирд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЙрдлрд╝, рдПрдХ рд╕рдорд╕реНрдпрд╛ред рдЦреИрд░, рдЬрд╣рд╛рдВ рд╣рдорд╛рд░рд╛ рдЧрд╛рдпрдм рдирд╣реАрдВ рд╣реБрдЖ ... рд╕рдореГрджреНрдз рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрдиреБрднрд╡ рджреНрд╡рд╛рд░рд╛ рд╕рд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк Google рдкрд░ рдЬрд╛рдПрдВ, "рдПрд▓реНрдл рд╡рд┐рдирд┐рд░реНрджреЗрд╢" рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рд▓рд┐рдВрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред рдУрд╣! рдпрд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдкреАрдбреАрдПрдл рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ ... рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реИ ... рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ Elf32_Sword рддрд▓рд╡рд╛рд░ - Elf32_Sword рддрд▓рд╡рд╛рд░реЗрдВ - рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдПред 32 рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рдЪрд░рд┐рддреНрд░ рдХрд╛ рд╕реНрддрд░ рд╣реИ, рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЙрд▓рдо рдореЗрдВ рджреЛ рдЪрд╛рд░ рд╢рд╛рдпрдж рдиреБрдХрд╕рд╛рди рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдк рдХреНрдпрд╛ рдЬрд░реВрд░рдд рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд!


рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдУрд▓рдВрдкрд┐рдпрд╛рдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛рд░реНрдп рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╛рдкрд╛рди, рд╕рдореБрд░рд╛рдИ рдФрд░ рдЧреАрд╢рд╛ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдкрд╛рда рдХреЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЗ рдмрд╛рдж: "рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдордЭ рдЪреБрдХреЗ рд╣реИрдВ, рдХрд╛рд░реНрдп рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред" рд╣рд╛рдВ, рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдереАред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдкрд╛рдВрдЪ рдорд┐рдирдЯ рдХреЗ рддрдк рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реВрдВред


рдЖрдЬ рдореИрдВ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ 64-рдмрд┐рдЯ рдИрдПрд▓рдПрдл рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЬреЛ рд╡реЗ рдЗрд╕рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рд╣реИрдВ рдореВрд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо, рд╕реНрдерд┐рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рд╣рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╢рд┐рд╖реНрдЯ, рдЬреИрд╕реЗ рдХреНрд░реИрд╢рдбрдореНрдкреНрд╕ ... рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдХрдИ рдЕрдиреНрдп рдпреВрдирд┐рдХреНрд╕ рдЬреИрд╕реЗ рд╕рд┐рд╕реНрдЯрдо, рд╣рд╛рдВ, рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдлреЛрди рднреАред рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рдкреИрдЪ рдХрд┐рдП рдЧрдП рдлрд░реНрдорд╡реЗрдпрд░ рдореЗрдВ рднрд░рд╛ рд╣реБрдЖ рдерд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧрдВрднреАрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рддреЛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ред рд╣рд╛рдБ, рдпрд╣ рд╢рд╛рдпрдж рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВрдЧреЗ: .o рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ eBPF рдмрд╛рдЗрдЯрдХреЛрдб рд▓реЛрдб рдХрд░рдирд╛ред рдРрд╕рд╛ рдХреНрдпреЛрдВ? рдмрд╕ рдЖрдЧреЗ рдХреЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдХреБрдЫ рдЧрдВрднреАрд░ (рдпрд╛рдиреА, рдШреБрдЯрдиреЗ-рдКрдВрдЪреЗ рдирд╣реАрдВ ) рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕реА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдИрдПрдХреНрд╕рдкреАрдПрдл рд╕рд░рд▓ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрд▓рдПрд▓рд╡реАрдПрдо рдмреИрдХрдПрдВрдб рд╣реИред рдФрд░ рдореБрдЭреЗ рдмрд╕ рдПрдХ рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ рдИрдПрд▓рдПрдл рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред


рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреВрдВрдЧрд╛: рд▓реЗрдЦ рдЦреЛрдЬрдкрд░рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╣реИ рдФрд░ рдПрдХ рд╕рдВрдкреВрд░реНрдг рдЧрд╛рдЗрдб рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдВрддрд┐рдо рд▓рдХреНрд╖реНрдп рдПрдХ рдмреВрдЯрд▓реЛрдбрд░ рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХреНрд▓реЗрдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдИрдПрдХреНрд╕рдкреАрдПрдл рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╕реА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ - рдЬреЛ рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИрдВ - рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдорд╛рддреНрд░рд╛ рдореЗрдВред


рд╣реИрдбрд░


рдИрдПрд▓рдПрдл рдореЗрдВ рд╢реВрдиреНрдп рдСрдлрд╕реЗрдЯ рд╕реЗ рд╢реБрд░реВ рд╣реЗрдбрд░ рдирд┐рд╣рд┐рдд рд╣реИред рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдХреНрд╖рд░ E, L, F рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдФрд░ рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЗ рд╕рд╛рде рдЦреЛрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджрд░рдЕрд╕рд▓, рд╣реЗрдбрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдСрдлрд╕реЗрдЯ рдкрд░ рд╕реНрдерд┐рдд рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╛рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред (рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВ 32-рдмрд┐рдЯ рдкреНрд░рд╛рд░реВрдк рдФрд░ elf.h рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд elf.h , рдЬреЛ 64-рдмрд┐рдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ)


рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдЬреЛ рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдорд┐рд▓рддреА рд╣реИ, рд╡рд╣ unsigned char e_ident[16] ред рдЗрди рдордЬреЗрджрд╛рд░ рд▓реЗрдЦреЛрдВ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ "рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрдпрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рд╕рднреА рдЭреВрдареЗ рд╣реИрдВ" рд╢реНрд░реГрдВрдЦрд▓рд╛? рдпрд╣рд╛рдБ рдпрд╣ рдЙрд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ: ELF рдореЗрдВ 32- рдпрд╛ 64-рдмрд┐рдЯ рдХреЛрдб, рд▓рд┐рдЯрд┐рд▓ рдпрд╛ рдмрд┐рдЧ рдПрдВрдбрд┐рдпрди рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рджрд░реНрдЬрди рд╕реЗ рдЕрдзрд┐рдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдПрдВрдбрд┐рдпрди рдХреЗ рддрд╣рдд рдПрд▓реНрдл 64 рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ - рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рд╕реМрднрд╛рдЧреНрдп ... рдмрд╛рдЗрдЯреНрд╕ рдХреА рдпрд╣ рд╕рд░рдгреА рдПрдХ рддрд░рд╣ рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИ рдЬреЛ рдЕрдВрджрд░ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрд╛рд░реНрд╕ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред


рдкрд╣рд▓реЗ рдЪрд╛рд░ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рдпрд╣ [0x7f, 'E', 'L', 'F'] ред рдпрджрд┐ рд╡реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдорд╛рдирдиреЗ рдХрд╛ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╡реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЧрд▓рдд рдордзреБрдордХреНрдЦрд┐рдпрд╛рдБ рд╣реИрдВред рдЕрдЧрд▓реЗ рдмрд╛рдЗрдЯ рдореЗрдВ рдХреНрд▓рд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдЪрд░рд┐рддреНрд░ рдлрд╝рд╛рдЗрд▓: ELFCLASS32 рдпрд╛ ELFCLASS64 - рдмрд┐рдЯ рдЧрд╣рд░рд╛рдИред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ 64-рдмрд┐рдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ (рдХреНрдпрд╛ 32-рдмрд┐рдЯ рдИрдПрдХреНрд╕рдкреАрдПрдл?) рд╣реИред рдпрджрд┐ рдХрдХреНрд╖рд╛ ELFCLASS32 рд╣реЛ ELFCLASS32 , рддреЛ рд╣рдо рдмрд╕ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ: рд╕рднреА рд╕рдорд╛рди, рд╕рдВрд░рдЪрдирд╛ "рдлреНрд▓реЛрдЯ" рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдкрд╡рд┐рддреНрд░рддрд╛ рдЬрд╛рдВрдЪ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреЛрдЯ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗрдЧреАред рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХреА рдЕрдВрддрд┐рдо рдмрд╛рдЗрдЯ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рдорд╛рдкреНрддрд┐ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреА рд╣реИ - рд╣рдо рдЕрдкрдиреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдореВрд▓ рдмрд╛рдЗрдЯ рдСрд░реНрдбрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред


рдпрджрд┐ рдореИрдВ C рдореЗрдВ ELF рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рдПрдВрдЧреЗ: рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЧрдгрдирд╛ рдХреЛ рдЪрддреБрд░рд╛рдИ рд╕реЗ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдСрдлрд╕реЗрдЯ рд╕реЗ рдШрдЯрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - elf.h рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ e_ident рдореЗрдВ рдмрд╛рдЗрдЯ рдирдВрдмрд░ рднреА рд╣реИрдВ: EI_MAG0 , EI_MAG1 , EI_MAG2 , EI_MAG3 , EI_CLASS рдбреЗрдЯрд╛ рд╕реЗ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдлрд╛рдЗрд▓ рд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рдореИрдк рдпрд╛ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░ рд╕реЗ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдФрд░ рд░реАрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


e_ident рдЕрд▓рд╛рд╡рд╛ e_ident рд╣реЗрдбрд░ рдореЗрдВ рдЕрдиреНрдп рдлрд╝реАрд▓реНрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдХреБрдЫ рд╣рдо рд╕рд┐рд░реНрдл рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдЧреЗ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВред рдЕрд░реНрдерд╛рддреН, рд╣рдо e_machine == EM_BPF рдХрд┐ e_machine == EM_BPF (рдЕрд░реНрдерд╛рдд, рдпрд╣ "eBPF рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд╣реИ"), e_type == ET_REL , e_shoff != 0 ред рдЕрдВрддрд┐рдо рдЪреЗрдХ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрд░реНрде рд╣реИрдВ: рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдВрдХрд┐рдВрдЧ (рд╕реЗрдХреНрд╢рди рдЯреЗрдмрд▓ рдФрд░ рд╕реЗрдХреНрд╢рди), рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЯреЗрдмрд▓ рдФрд░ рд╕реЗрдЧрдореЗрдВрдЯ), рдпрд╛ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИред рдкрд┐рдЫрд▓реЗ рджреЛ рдЪреЗрдХ рдХреЗ рд╕рд╛рде, рд╣рдо рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдЬреЛ рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рд┐рдП (рдЬреИрд╕реЗ рдХрд┐ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдлрд╛рдЗрд▓ рдореЗрдВ рд╣реИред рдпрд╣ рднреА рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг EV_CURRENT ред


рддреБрд░рдВрдд рдЖрд░рдХреНрд╖рдг рдХрд░реЗрдВ, рдореИрдВ рдлрд╝рд╛рдЗрд▓ рдХреА рд╡реИрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВред рдЕрд╡рд┐рд╢реНрд╡рд╛рд╕рд┐рдд рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд░реНрдиреЗрд▓ рдпрд╛ рдЕрдиреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдХреЛрдб рдореЗрдВ, рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдирд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд╕рдВрднрд╡ рд╣реИ ред


рдЕрдиреБрднрд╛рдЧ рддрд╛рд▓рд┐рдХрд╛


рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рд╣рдо рдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдВрдХрд┐рдВрдЧ рд╡реНрдпреВ, рдпрд╛рдиреА рд╕реЗрдХреНрд╢рди рдЯреЗрдмрд▓ рдФрд░ рд╕реНрд╡рдпрдВ рд╕реЗрдХреНрд╢рди рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рд╣реЗрдбрд░ рдореЗрдВ рд╕реЗрдХреНрд╢рди рдЯреЗрдмрд▓ рдХреА рддрд▓рд╛рд╢ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рдХрд╣рд╛рдБ рд╣реИред рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ рд╡рд╣рд╛рдВ рднреА рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдПрдХ рддрддреНрд╡ рдХрд╛ рдЖрдХрд╛рд░ - рдпрд╣ рдЖрдХрд╛рд░ рд╕реЗ рдмрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ sizeof(Elf64_Shdr) (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛, рдореБрдЭреЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ)ред рдХреБрдЫ рдкреНрд░рдореБрдЦ рдЦрдВрдб рд╕рдВрдЦреНрдпрд╛рдПрдБ рдЖрд░рдХреНрд╖рд┐рдд рд╣реИрдВ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рд╢реЗрд╖ рдЕрд░реНрде рд╣реИред рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ SHN_UNDEF рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ (рд╢реВрдиреНрдп рднреА рдЖрд░рдХреНрд╖рд┐рдд рд╣реИ - рд▓рд╛рдкрддрд╛ рдЕрдиреБрднрд╛рдЧ; рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЗрд╕рдХрд╛ рд╢реАрд░реНрд╖рдХ рдЕрднреА рднреА рд╣реИ) SHN_ABS ред рдЪрд░рд┐рддреНрд░ " SHN_UNDEF рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рдФрд░ SHN_ABS рдЗрд╕рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдкреВрд░реНрдг рдореВрд▓реНрдп рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, SHN_ABS рдореЗрд░реЗ SHN_ABS рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИред


рдкрдВрдХреНрддрд┐ рддрд╛рд▓рд┐рдХрд╛


рдпрд╣рд╛рдБ рд╣рдо рдкрд╣рд▓реА рдмрд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЯреЗрдмрд▓ - рдлрд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдЯреЗрдмрд▓ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ const char *strtab рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ, рддреЛ sh_name рдХреЗрд╡рд▓ strtab + sh_name ред рд╣рд╛рдВ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реВрдЪрдХрд╛рдВрдХ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд░реЗрдЦрд╛ рд╣реИ рдФрд░ рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ рддрдХ рдЬрд╛рд░реА рд╣реИред рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдХрд░ рд╕рдХрддреА рд╣реИрдВ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдПрдХ рджреВрд╕рд░реЗ рдХрд╛ рдкреНрд░рддреНрдпрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ рдирд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ ELF рд╣реИрдбрд░ рдореЗрдВ e_shstrndx рдлрд╝реАрд▓реНрдб рдкрдВрдХреНрддрд┐ рддрд╛рд▓рд┐рдХрд╛ (рдЕрдиреБрднрд╛рдЧ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ, рдпрджрд┐ рдХрдИ рд╣реИрдВ) рдХреЗ рдПрдХ рдЦрдВрдб рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛, рдФрд░ рдЕрдиреБрднрд╛рдЧ рд╣реЗрдбрд░ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрдВрдХреНрддрд┐ рдореЗрдВ sh_name рдлрд╝реАрд▓реНрдбред


рдкрдВрдХреНрддрд┐ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдкрд╣рд▓реЗ (рд╢реВрдиреНрдп) рдФрд░ рдЕрдВрддрд┐рдо рдмрд╛рдЗрдЯ рдореЗрдВ рдЕрд╢рдХреНрдд рд╡рд░реНрдг рд╣реЛрддреЗ рд╣реИрдВред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХреНрдпреЛрдВ: рдореВрд▓реНрдп-рдШрдВрдЯреЗ, рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рд╢реВрдиреНрдп рдСрдлрд╕реЗрдЯ рдПрдХ рдЕрдиреБрдкрд╕реНрдерд┐рдд рдпрд╛ рдЦрд╛рд▓реА рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ - рд╕рдВрджрд░реНрдн рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред


рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ рд╡рд░реНрдЧреЛрдВ


рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдХреНрд╢рди рдХреЗ рд╣реЗрдбрд░ рдореЗрдВ рджреЛ рдПрдбреНрд░реЗрд╕ рд╣реЛрддреЗ рд╣реИрдВ: рдПрдХ, sh_addr рд▓реЛрдб рдПрдбреНрд░реЗрд╕ (рдЬрд╣рд╛рдБ рд╕реЗрдХреНрд╢рди рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛), рджреВрд╕рд░рд╛, sh_offset рдЙрд╕ рдлрд╛рдЗрд▓ рдореЗрдВ рдСрдлрд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдпрд╣ рд╕реЗрдХреНрд╢рди рдирд┐рд╣рд┐рдд рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╡реЗ рджреЛрдиреЛрдВ рдХреИрд╕реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рди 0 рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдиреБрднрд╛рдЧ "рдбрд┐рд╕реНрдХ рдкрд░ рд░рд╣рддрд╛ рд╣реИ", рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реЗрд╡рд╛ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рджреВрд╕рд░реЗ рдореЗрдВ, рдЕрдиреБрднрд╛рдЧ рдбрд┐рд╕реНрдХ рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рдЗрд╕реЗ рдЪреБрдирдиреЗ рдФрд░ рдЗрд╕реЗ рд╢реВрдиреНрдп ( .bss ) рдХреЗ рд╕рд╛рде рд╕реНрдХреЛрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдЬрдмрдХрд┐ рдореБрдЭреЗ рдбрд╛рдЙрдирд▓реЛрдб рдкрддреЗ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдерд╛ - рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╡рд╣рд╛рдВ рдЗрд╕реЗ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ :) рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИрдВ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рднреАред


рдкреБрдирд░реНрд╡рд╛рд╕


рдФрд░ рдЕрдм рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд: рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╡реЗ рдЖрдзрд╛рд░ рдкрд░ рд╢реЗрд╖ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд┐рдирд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВред рдФрд░ рдЬрдм рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдпрд╣рд╛рдВ рдлрдВрддрд╛рд╕реА рд╣реИ, рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдЯреЗрд▓реАрдкреИрдерд┐рдХ рд╣реЛрдЧрд╛ред рдЕрд░реЗ рд╣рд╛рдБ, рдореИрдВрдиреЗ рдкрд╛рдБрдЪ рдорд┐рдирдЯ рдХреЗ рддрдк рдХреА рдШреЛрд╖рдгрд╛ рдХреАред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдо рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд▓рд┐рдВрдХрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред


рдореЗрд░реЗ рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдирд┐рдпрдорд┐рдд libdl рд╕рд╛рде рд▓реЛрдб рдХрд┐рдП рдЧрдП рдПрдХ рдирд┐рдпрдорд┐рдд рдмреВрдЯ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ libdl ред рдпрд╣рд╛рдБ рдореИрдВрдиреЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ - рдмрд╕ dlopen рдЦреЛрд▓реЗрдВ, dlsym рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд░реНрдгреЛрдВ рдХреЛ рдмрд╛рд╣рд░ dlsym , рдХрд╛рд░реНрдпрдХреНрд░рдо dlclose рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ dlclose рд╕рд╛рде рдмрдВрдж рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рднреА рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдИрдПрд▓рдПрдл рдлрд╝рд╛рдЗрд▓ рд▓реЛрдбрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдмрд╕ рдХреБрдЫ рд╕рдВрджрд░реНрдн рд╣реИ : рдирд╛рдо рд╕реЗ рд╕реВрдЪрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, eBPF рдирд┐рд░реНрджреЗрд╢ рд╕реЗрдЯ рд╕рдВрд░реЗрдЦрд┐рдд рдорд╢реАрди рдХреЛрдб рдХреА рдПрдХ рдЬреАрдд рд╣реИ: рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рд╣рдореЗрд╢рд╛ 8 рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реЛрддреА рд╣реИ


 struct { uint8_t opcode; uint8_t dst:4; uint8_t src:4; uint16_t offset; uint32_t imm; }; 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдПрдХ "рдорд╢реАрди" рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреА рдмрдЪрдд рд╣рдорд╛рд░реЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкрд╣рд▓рд╛ рдирд┐рд░реНрджреЗрд╢ рддреБрд░рдВрдд рджреВрд╕рд░реЗ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рднреА рдСрдкрдХреЛрдб рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╕ 32 рд╕реЗ 64 рдмрд┐рдЯреНрд╕ рддрдХ рддрддреНрдХрд╛рд▓ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдпреМрдЧрд┐рдХ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдЪ рд╣реИ рдЬрд┐рд╕реЗ R_BPF_64_64 рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред


рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╣рдо sh_type == SHT_REL рдХреЗ рдЕрдиреБрднрд╛рдЧ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ sh_type == SHT_REL ред рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдХрд╛ sh_info рдлрд╝реАрд▓реНрдб рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдкреИрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ sh_link - рд╡рд░реНрдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рд╕ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд▓реЗрдирд╛ рд╣реИред


 typedef struct { Elf64_Addr r_offset; Elf64_Xword r_info; } Elf64_Rel; 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдЕрдиреБрднрд╛рдЧ рд╣реИрдВ: REL рдФрд░ RELA - рджреВрд╕рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╢рдмреНрдж рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рд┐рд░реНрдл рдЗрд╕ рддрдереНрдп рдкрд░ рдЬреЛрд░ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдВрдЧреЗред рдЕрдЧрд▓рд╛, рдореИрдВ рдЙрд╕ рдореВрд▓реНрдп рдореЗрдВ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдЬреЛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдкреНрд░рддреАрдХ рдХрд╛ рдкрддрд╛ред рдФрд░ рдХрд╣рд╛рдВ рд╕реЗ рд▓рд╛рдПрдВ? рдпрд╣рд╛рдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╡рд┐рдХрд▓реНрдк рд╕рдВрднрд╡ рд╣реИрдВ:


  • рдкреНрд░рддреАрдХ SHN_ABS рдЕрдиреБрднрд╛рдЧ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рддреЛ рдмрд╕ st_value рд▓реЗ st_value
  • рдЪрд░рд┐рддреНрд░ `SHN_UNDEF рдЕрдиреБрднрд╛рдЧ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдмрд╛рд╣рд░реА рдкреНрд░рддреАрдХ рдЦреАрдВрдЪреЗрдВ
  • рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдмрд╕ рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдЕрдиреБрднрд╛рдЧ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рдкреИрдЪ рдХрд░реЗрдВ

рдЗрд╕реЗ рдЦреБрдж рдХреИрд╕реЗ рдЖрдЬрдорд╛рдПрдВ


рдкрд╣рд▓рд╛, рдХреНрдпрд╛ рдкрдврд╝рдирд╛ рд╣реИ? рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрд▓рд╛рд╡рд╛ , рдпрд╣ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ iovisor рдЯреАрдо eBPF рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рд╕реЗ рдирд┐рдХрд╛рд▓реА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рддреА рд╣реИред


рджреВрд╕рд░реЗ, рдХреИрд╕реЗ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рднреА рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдХрд╣реАрдВ рд╕реЗ ELF рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрдЯреИрдХрдСрд╡рд░рдлреЙ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ , рдЯреАрдо рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧреАред


 clang -O2 -emit-llvm -c bpf.c -o - | llc -march=bpf -filetype=obj -o bpf.o 

рджреВрд╕рд░реЗ, рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдПрдХ рд╕рдВрджрд░реНрдн рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ, objdump рдХрдорд╛рдВрдб рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧреА:


 $ objdump : objdump <> <()>     <()>.          : -a, --archive-headers Display archive header information -f, --file-headers Display the contents of the overall file header -p, --private-headers Display object format specific file header contents -P, --private=OPT,OPT... Display object format specific contents -h, --[section-]headers Display the contents of the section headers -x, --all-headers Display the contents of all headers -d, --disassemble Display assembler contents of executable sections -D, --disassemble-all Display assembler contents of all sections --disassemble=<sym> Display assembler contents from <sym> -S, --source Intermix source code with disassembly -s, --full-contents Display the full contents of all sections requested -g, --debugging Display debug information in object file -e, --debugging-tags Display debug information using ctags style -G, --stabs Display (in raw form) any STABS info in the file -W[lLiaprmfFsoRtUuTgAckK] or --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames, =frames-interp,=str,=loc,=Ranges,=pubtypes, =gdb_index,=trace_info,=trace_abbrev,=trace_aranges, =addr,=cu_index,=links,=follow-links] Display DWARF info in the file -t, --syms Display the contents of the symbol table(s) -T, --dynamic-syms Display the contents of the dynamic symbol table -r, --reloc Display the relocation entries in the file -R, --dynamic-reloc Display the dynamic relocation entries in the file @<file> Read options from <file> -v, --version Display this program's version number -i, --info List object formats and architectures supported -H, --help Display this information 

рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╢рдХреНрддрд┐рд╣реАрди рд╣реИ:


 $ objdump -d test-bpf.o test-bpf.o:   elf64-little objdump:      UNKNOWN! 

рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдпрд╣ рд╡рд░реНрдЧреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрд╕рдВрддреБрд╖реНрдЯ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдпрд╛рдж рд╣реИ рдХрд┐ рд╣рдордиреЗ LLVM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрдпрд╛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдерд╛ред llvm-< > рд╕реЗ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдПрдирд╛рд▓реЙрдЧ рд╣реИрдВ, рдлреЙрд░реНрдо llvm-< > рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рдеред рд╡реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрд▓рдПрд▓рд╡реАрдПрдо рдмрд┐рдЯрдХреЛрдб рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВред рдФрд░ рд╡реЗ eBPF рдХреЛ рднреА рд╕рдордЭрддреЗ рд╣реИрдВ - рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рд╕рдВрдХрд▓рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдпрд╣ рд╕рдВрдХрд▓рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ:


 vim test-bpf.c #     clang -Oz -emit-llvm -c test-bpf.c -o - | llc -march=bpf -filetype=obj -o test-bpf.o llvm-objdump -d -t -r test-bpf.o 

рдлрд┐рд░ рдРрд╕реЗ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП:


 #include <stdint.h> extern uint64_t z; uint64_t func(uint64_t x, uint64_t y) { return x + y + z; } 

рдРрд╕рд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛:


 $ ./compile-bpf.sh test-bpf.o: file format ELF64-BPF Disassembly of section .text: 0000000000000000 func: 0: bf 20 00 00 00 00 00 00 r0 = r2 1: 0f 10 00 00 00 00 00 00 r0 += r1 2: 18 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 r1 = 0 ll 0000000000000010: R_BPF_64_64 z 4: 79 11 00 00 00 00 00 00 r1 = *(u64 *)(r1 + 0) 5: 0f 10 00 00 00 00 00 00 r0 += r1 6: 95 00 00 00 00 00 00 00 exit SYMBOL TABLE: 0000000000000000 l df *ABS* 00000000 test-bpf.c 0000000000000000 ld .text 00000000 .text 0000000000000000 g F .text 00000038 func 0000000000000000 *UND* 00000000 z 

рдХреЛрдб ред


рднрд╛рдЧ 1. QInst: рдПрдХ рджрд┐рди рдЦреЛрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдлрд┐рд░ рдкрд╛рдВрдЪ рдорд┐рдирдЯ рдореЗрдВ рдЙрдбрд╝рд╛рди рднрд░реЗрдВ (рд▓реЗрдЦрди рдЙрдкрдХрд░рдг рддреБрдЪреНрдЫ рд╣реИ)

Source: https://habr.com/ru/post/hi452592/


All Articles