
рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ https://github.com/Nalen98
рд╢реБрдн рджреЛрдкрд╣рд░
рдбрд┐рдЬрд┐рдЯрд▓ рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдореЗрдВ рд╕рдорд░ рдСрдл рд╣реИрдХ 2019 рд╕рдорд░ рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрд░реЗ рд╢реЛрдз рдХрд╛ рд╡рд┐рд╖рдп рдерд╛ "рдШрд┐рдбрд░рд╛ рдореЗрдВ рдИрдХреЛрдкреНрд▓рд┐рдВрдЧ рдХреЛ рдбрд┐рдХрдореНрдкрд╛рдЗрд▓ рдХрд░рдирд╛ред" рдкреАрд╕реАрдУ рдШрд┐рджреНрд░ рдореЗрдВ рд╕реНрд▓реАрд╡ рд▓реИрдВрдЧреНрд╡реЗрдЬ рдореЗрдВ рдПрдХ рдИрдПрдХреНрд╕рдкреАрдПрдл рдмрд╛рдИрдЯреЗрдХреЛрдб рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рддрд╛рдХрд┐ рдИрдПрдХреНрд╕рдкреАрдПрдл рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдФрд░ рд╡рд┐рдШрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЕрдзреНрдпрдпрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо Ghidra рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд╕рд┐рдд рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ рдЬреЛ рдХрд┐ eBPF рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЕрдиреНрдп рдкреНрд░рд╢рд┐рдХреНрд╖реБрдУрдВ рдХреА рддрд░рд╣ рд╣реА, рдЕрдзреНрдпрдпрди рдХреЛ "рдкрд╣рд▓реА рдмрд╛рд░" рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЕрдиреНрдп рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдЯреВрд▓ рдореЗрдВ рдИрдПрдХреНрд╕рдкреАрдПрдл рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред
рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕
рдпрд╣ рд╡рд┐рд╖рдп рдореЗрд░реЗ рд▓рд┐рдП рднрд╛рдЧреНрдп рдХреА рдПрдХ рдмрдбрд╝реА рд╡рд┐рдбрдВрдмрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ EBPF рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рдерд╛, рдФрд░ Ghidr рдкрд╣рд▓реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╣рдардзрд░реНрдорд┐рддрд╛ рдереА рдХрд┐ "рдЖрдИрдбреАрдП рдкреНрд░реЛ рдмреЗрд╣рддрд░ рд╣реИред" рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИред
рдШрд┐рджреНрд░рд╛ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдирд┐рдХрд▓рд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдмрд╣реБрдд рд╕рдХреНрд╖рдо рдФрд░ рд╕реБрд▓рдн рджрд╕реНрддрд╛рд╡реЗрдЬ рддреИрдпрд╛рд░ рдХрд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд╕реНрд▓реАрд╡ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рднрд╛рд╖рд╛ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреА рдереА, рдЬрд┐рд╕ рдкрд░ рд╡рд┐рдХрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЕрдкрдирд╛ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдХрд┐рдпрд╛ рдФрд░ рдЯреВрд▓ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕реНрд▓реАрд╡ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рд▓реЗрдЦрди рдмрдирд╛рдпрд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред
рдмреИрд░рд┐рдХреЗрдб рдХреЗ рджреВрд╕рд░реА рддрд░рдл рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдмрд░реНрдХрд▓реЗ рдкреИрдХреЗрдЯ рдлрд╝рд┐рд▓реНрдЯрд░ рдерд╛ред рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реНрдиреЗрд▓ рд╕реНрдерд╛рди рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдкреИрдХреЗрдЯ рдХреЛ рдлрд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдПрдХ RISC рд░рдЬрд┐рд╕реНрдЯрд░ рдорд╢реАрди рд╣реИ рдЬрд┐рд╕рдореЗрдВ 11 64-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░, рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХрд╛рдЙрдВрдЯрд░ рдФрд░ рдПрдХ 512-рдмрд╛рдЗрдЯ рд╕реНрдЯреИрдХ рд╣реИред EBPF рдХреЗ рд▓рд┐рдП рдХрдИ рд╕реАрдорд╛рдПрдБ рд╣реИрдВ:
- рдЪрдХреНрд░ рдирд┐рд╖рд┐рджреНрдз рд╣реИрдВ;
- рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдВрдЪ рдХреЗрд╡рд▓ рд╕реНрдЯреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрднрд╡ рд╣реИ (рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реЛрдЧреА);
- рдХрд░реНрдиреЗрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд░рдг рдХрд╛рд░реНрдпреЛрдВ (eBPF- рд╣реЗрд▓реНрдкрд░реНрд╕) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

EBPF рддрдХрдиреАрдХ рдХреА рд╕рдВрд░рдЪрдирд╛ред рдЫрд╡рд┐ рд╕реНрд░реЛрдд: http://www.brendangregg.com/ebpf.html
рдореВрд▓ рд░реВрдк рд╕реЗ, рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдбрд┐рдмрдЧрд┐рдВрдЧ, рдкреИрдХреЗрдЯ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ, рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХрд░реНрдиреЗрд▓ рд╕реНрддрд░ рдкрд░ред рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 3.15 рд╕реЗ EBPF рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рд▓рд┐рдирдХреНрд╕ рдкреНрд▓рдВрдмрд░ рд╕рдореНрдореЗрд▓рди 2019 рдореЗрдВ рдЗрд╕ рддрдХрдиреАрдХ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдХреБрдЫ рд░рд┐рдкреЛрд░реНрдЯ рд╕рдорд░реНрдкрд┐рдд рдХреА рдЧрдИ рдереАред рд▓реЗрдХрд┐рди eBPF рдореЗрдВ, Ghidra рдХреЗ рд╡рд┐рдкрд░реАрдд, рдкреНрд░рд▓реЗрдЦрди рдЕрдкреВрд░реНрдг рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдФрд░ рд▓рд╛рдкрддрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЦреЛрдЬрд╛ рдЬрд╛рдирд╛ рдерд╛ред рдЙрддреНрддрд░реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рд▓рдЧрд╛, рдФрд░ рдЬреЛ рдХреБрдЫ рднреА рдмрд╛рдХреА рд╣реИ, рд╡рд╣ рдЙрдореНрдореАрдж рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд▓реЗрдЦрди рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЦрд░рд╛рдм рдкреНрд░рд▓реЗрдЦрди
рд╕реНрд▓реАрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд▓рдХреНрд╖реНрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рд╣рдо рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред
рдЗрд╕рдореЗрдВ рдХрдИ рдЦрд╛рдорд┐рдпрд╛рдВ рд╣реИрдВ:
EBPF рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рд╣реИред
рдЗрдВрдЯреЗрд▓ x86 рдЬреИрд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд┐рдирд┐рд░реНрджреЗрд╢, рдЖрдорддреМрд░ рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрджреЗрд╢ рдмрд┐рдЯ рдХреНрдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдХрд┐рд╕ рдмреНрд▓реЙрдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, eBPF рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ, рдпреЗ рд╡рд┐рд╡рд░рдг рдпрд╛ рддреЛ рдкреВрд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдмрд┐рдЦрд░реЗ рд╣реБрдП рд╣реИрдВ рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрдВ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рд╕реЗ рд▓рд╛рдкрддрд╛ рдЕрдирд╛рдЬ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрджреЗрд╢ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ op:8, dst_reg:4, src_reg:4, off:16, imm:32
рдРрд╕рд╛ рд╢рдмреНрдж рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдСрдлрд╕реЗрдЯ (рдмрдВрдж) рдФрд░ рддрддреНрдХрд╛рд▓ (imm) рдкрд░ signed
рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЕрддреНрдпрдВрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдирд┐рд░реНрджреЗрд╢реЛрдВ рд╕реЗ рдЫрд▓рд╛рдВрдЧ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ред рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдиреЗ рдорджрдж рдХреАред
рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд mnemonics рдХреА рдкреВрд░реА рддрд╕реНрд╡реАрд░ рдирд╣реАрдВ рд╣реИред
рдХреБрдЫ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ, рди рдХреЗрд╡рд▓ рд╕рднреА рдирд┐рд░реНрджреЗрд╢, рдЙрдирдХреЗ рдСрдкрд░реЗрдВрдб рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╕реА, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗрд╕, рдСрдкрд░реЗрдВрдб рдлреАрдЪрд░реНрд╕, рдЖрджрд┐ рдореЗрдВ рднреА рдЙрдирдХреЗ рд╢рдмреНрджрд╛рд░реНрде рд╣реИрдВред EBPF рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ рдХрдХреНрд╖рд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдЖрдЗрдП рдЙрди рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
EBPF рдХреЗ рд╕рднреА рдирд┐рд░реНрджреЗрд╢ 64-рдмрд┐рдЯ рд╣реИрдВ, LDDW
(рд▓реЛрдб рдбрдмрд▓ рд╢рдмреНрдж) рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЗрд╕рдореЗрдВ 128 рдмрд┐рдЯреНрд╕ рдХрд╛ рдЖрдХрд╛рд░ рд╣реИ, рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ 32 рдмрд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рде рджреЛ рдХреЛ рд╕рдореЗрдЯрддрд╛ рд╣реИред EBPF рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рд╣реИред

eBPF рдирд┐рд░реНрджреЗрд╢ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ
OPAQUE
рдлрд╝реАрд▓реНрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╡рд░реНрдЧ (ALU / JMP, рд▓реЛрдб / рд╕реНрдЯреЛрд░) рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ALU
рдЕрдиреБрджреЗрд╢ рд╡рд░реНрдЧ:

ALU рдирд┐рд░реНрджреЗрд╢ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ
рдФрд░ JMP
рд╡рд░реНрдЧ рдХреА рдЕрдкрдиреА рдХреНрд╖реЗрддреНрд░ рд╕рдВрд░рдЪрдирд╛ рд╣реИ:

рд╢рд╛рдЦрд╛ рдирд┐рд░реНрджреЗрд╢ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ
рд▓реЛрдб / рд╕реНрдЯреЛрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рдВрд░рдЪрдирд╛ рдЕрд▓рдЧ рд╣реИ:

рд▓реЛрдб / рд╕реНрдЯреЛрд░ рдирд┐рд░реНрджреЗрд╢ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ
рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ EBPF рдкреНрд░рд▓реЗрдЦрди рдиреЗ рдЗрд╕реЗ рд╕реБрд▓рдЭрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХреАред
рдХреЙрд▓-рд╣реЗрд▓реНрдкрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП eBPF рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рддрд░реНрдХ рдирд┐рд░реНрдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣реЗрд▓реНрдкрд░реНрд╕ рдИрдкреАрдкреАрдПрдл рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬ рд╣реИрдВ, рд╡реЗ рд╕рд┐рд░реНрдл рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рди рдкрд░ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред

рдкрд░рдорд╛рдгреБ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде EBPF рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд┐рд▓рд┐рдЯреА
рдХрд╛рд░реНрдпрдХреНрд░рдо рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░реНрдиреЗрд▓ рд╕реЗ рдЦреАрдВрдЪрддрд╛ рд╣реИ, рдФрд░ рд╡реЗ рд╕рд┐рд░реНрдл рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдиреЗрдЯрд╡рд░реНрдХ рдкреИрдХреЗрдЯ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рддреЗ рд╣реИрдВ, eBPF рдХреЗ рдирдХреНрд╢реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд╕реЙрдХреЗрдЯреНрд╕ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдЕрднреА рднреА рдкрд░рдорд╛рдгреБ рд╣реИрдВ, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ред рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг рд▓рд┐рдирдХреНрд╕ рд╕реНрд░реЛрдд рдореЗрдВ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред
- рдЯреЗрд▓ рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╢рдмреНрдж рдирд╣реАрдВред

EBPF рдЯреЗрд▓ рдХреЙрд▓ред рдЫрд╡рд┐ рд╕реНрд░реЛрдд: https://cilium.readthedocs.io/en/latest/bpf/#tail-calls ред
рдЯреЗрд▓ рдХреЙрд▓ рдПрдХ рдРрд╕рд╛ рддрдВрддреНрд░ рд╣реИ, рдЬреЛ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рджреВрд╕рд░реЗ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдИрдЬреАрдкреАрдПрдл рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрд╛рдиреА рд╡рд┐рднрд┐рдиреНрди рдИрдПрдХреНрд╕рдкреАрдПрдл рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдмреАрдЪ рдХреВрджред рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рд╕рд┐рд▓рд┐рдпрдо рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдЦрд░рд╛рдм рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдФрд░ eBPF рдХреА рдХрдИ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдореБрдЦреНрдп "рд╕реНрдкреНрд▓рд┐рдВрдЯрд░реНрд╕" рдереАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХреАрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рд╕рднреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрд▓реАрд╡ рдХреЛрдб рдмрдирд╛рдиреЗ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдШрд┐рджреНрд░рд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рдПрдХреНрд╕рдЯреЗрдВрд╢рди / рдкреНрд▓рдЧрдЗрди рдлрд╛рдЗрд▓реЗрдВ, рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рд╣реИ - GhidraDev рдФрд░ GhidraSleighEditor рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЧреНрд░рд╣рдг рдЖрдИрдбреАрдИред рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рддреЗ рд╕рдордп, рдЗрд╕реЗ рддреБрд░рдВрдд рдХрд╛рдо рдХреЗ рдорд╕реМрджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╕реНрд▓реАрд╡-рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рднрд╛рд╖рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдореБрдЦреНрдп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЪреЗрдХрд░ рднреА рд╣реИред
рдЧреНрд░рд╣рдг рдореЗрдВ, рдЖрдк рдШрд┐рджреНрд░рд╛ (рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд╛рд▓реВ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде), рдбрд┐рдмрдЧ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдмреЗрд╣рдж рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрд╡рд╕рд░ "рдШрд┐рджреНрд░рд╛ рд╣реЗрдбрд▓реЗрд╕" рдореЛрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЖрдкрдХреЛ рдХреЛрдб рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреАрдпреВрдЖрдИ рд╕реЗ 100500 рдмрд╛рд░ Ghidr рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВред
рдиреЛрдЯрдкреИрдб рдХреЛ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ! рдФрд░ рдЖрдк рдЧреНрд░рд╣рдг рдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд▓рдЧ рдЗрди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Ecplise рдореЗрдВ, рд╣реЗрд▓реНрдк тЖТ рдЗрдирд╕реНрдЯреЙрд▓ рдиреНрдпреВ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ ... рдЬреЛрдбрд╝реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдкреНрд▓рдЧрдЗрди рдЬрд╝рд┐рдк рдЖрд░реНрдХрд╛рдЗрд╡ рдЪреБрдиреЗрдВред
рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдХрд╛рд╕
рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрд╕реЗрд╕рд░ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдлрд╛рдЗрд▓реЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХреА рдЧрдИрдВ, рдПрдХ рд▓реЛрдбрд░ рдЬреЛ рдореБрдЦреНрдп рдИрдПрд▓рдПрдл рд▓реЛрдбрд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдИрдЬреАрдкреАрдПрдл рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдорд╛рдиреНрдпрддрд╛ рджреЗрдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдкрдиреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдШрд┐рджреНрд░рд╛ рдбрд┐рд╕реНрд╕реЗрдореНрдмрд▓рд░ рдФрд░ рдбрд┐рдХрдореНрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдИрдПрдХреНрд╕рдкреАрдПрдл рдореИрдкреНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░реНрд╡рд╛рд╕ рдкреНрд░реЛрд╕реЗрд╕рд░, рд╕рд╛рде рд╣реА рд╕рд╛рде рдИрдПрдХреНрд╕рдкреАрдПрдл рд╣реЗрд▓реНрдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХред


рдПрдХреНрд▓рд┐рдкреНрд╕ рдЖрдИрдбреАрдИ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдлрд╛рдЗрд▓реЗрдВ
рдЕрдм рдореБрдЦреНрдп рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:
.cspec
- рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ eBPF рдореЗрдВ рдХрд┐рддрдиреА рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рд╕реНрдЯреИрдХ рдХрд╛ рдЖрдХрд╛рд░ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, "рд╕реНрдЯреИрдХрдкреЙрдЗрдВрдЯ" рд▓реЗрдмрд▓ R10
рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЙрд▓ рд╕рдордЭреМрддреЗ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдордЭреМрддрд╛ (рдмрд╛рдХреА рдХреА рддрд░рд╣) рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
рдЗрд╕рд▓рд┐рдП, рдИрдмреАрдкреАрдПрдл рдХреЙрд▓рд┐рдВрдЧ рдХрдиреНрд╡реЗрдВрд╢рди рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
- R0 - рдЗрди-рдХрд░реНрдиреЗрд▓ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╡рд╛рдкрд╕реА рдорд╛рди рдФрд░ eBPF рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдирд┐рдХрд╛рд╕ рдорд╛рди
- R1 - R5 - eBPF рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗ рдЗрди-рдХрд░реНрдиреЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рддрд░реНрдХ
- R6 - R9 - рдХреИрд▓реА рдиреЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдмрдЪрд╛рдпрд╛ рдХрд┐ рдЗрди-рдХрд░реНрдиреЗрд▓ рдлрд╝рдВрдХреНрд╢рди рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░реЗрдЧрд╛
- R10 - рд╕реНрдЯреИрдХ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реНрд░реЗрдо рдкреЙрдЗрдВрдЯрд░
eBPF.cspec <?xml version="1.0" encoding="UTF-8"?> <compiler_spec> <data_organization> <absolute_max_alignment value="0" /> <machine_alignment value="2" /> <default_alignment value="1" /> <default_pointer_alignment value="4" /> <pointer_size value="4" /> <wchar_size value="4" /> <short_size value="2" /> <integer_size value="4" /> <long_size value="4" /> <long_long_size value="8" /> <float_size value="4" /> <double_size value="8" /> <long_double_size value="8" /> <size_alignment_map> <entry size="1" alignment="1" /> <entry size="2" alignment="2" /> <entry size="4" alignment="4" /> <entry size="8" alignment="8" /> </size_alignment_map> </data_organization> <global> <range space="ram"/> <range space="syscall"/> </global> <stackpointer register="R10" space="ram"/> <default_proto> <prototype name="__fastcall" extrapop="0" stackshift="0"> <input> <pentry minsize="1" maxsize="8"> <register name="R1"/> </pentry> <pentry minsize="1" maxsize="8"> <register name="R2"/> </pentry> <pentry minsize="1" maxsize="8"> <register name="R3"/> </pentry> <pentry minsize="1" maxsize="8"> <register name="R4"/> </pentry> <pentry minsize="1" maxsize="8"> <register name="R5"/> </pentry> </input> <output killedbycall="true"> <pentry minsize="1" maxsize="8"> <register name="R0"/> </pentry> </output> <unaffected> <varnode space="ram" offset="8" size="8"/> <register name="R6"/> <register name="R7"/> <register name="R8"/> <register name="R9"/> <register name="R10"/> </unaffected> </prototype> </default_proto> </compiler_spec>
рд╡рд┐рдХрд╛рд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ .cspec
рдлрд╝рд╛рдЗрд▓ рдХреА рдПрдХ рдЫреЛрдЯреА рд▓рд╛рдЗрди рдкрд░ .cspec
ред
<stackpointer register="R10" space="ram"/>
рдпрд╣ Ghidra рдореЗрдВ рдИрдПрдХреНрд╕рдкреАрдПрдл рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рдиреЗ рдкрд░ рдмреБрд░рд╛рдИ рдХрд╛ рдореБрдЦреНрдп рд╕реНрд░реЛрдд рд╣реИ, рдФрд░ рдЗрд╕рдиреЗ рдИрдкреАрдкреАрдПрдл рд╕реНрдЯреИрдХ рдореЗрдВ рдПрдХ рд░реЛрдорд╛рдВрдЪрдХ рдпрд╛рддреНрд░рд╛ рд╢реБрд░реВ рдХреА, рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдЕрдкреНрд░рд┐рдп рдХреНрд╖рдг рд╣реИрдВ, рдФрд░ рдЬрд┐рд╕рдиреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рджрд░реНрдж рд▓рд╛рдпрд╛ред
рд╣рдо рд╕рднреА рдХреА рдЬрд░реВрд░рдд рд╣реИ ... рдвреЗрд░
рдЖрдЗрдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХрд░реНрдиреЗрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬ рджреЗрдЦреЗрдВ :
рдкреНрд░рд╢реНрди: рдХреНрдпрд╛ рдмреАрдкреАрдПрдл рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреЙрдЗрдВрдЯрд░ рдпрд╛ рд░рд┐рдЯрд░реНрди рдПрдбреНрд░реЗрд╕ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
A: рдирд╣реАрдВред
рдкреНрд░рд╢реНрди: рдХреНрдпрд╛ рдмреАрдкреАрдПрдл рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдЯреИрдХ рдкреЙрдЗрдВрдЯрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ?
A: рдирд╣реАрдВред рдХреЗрд╡рд▓ рдлрд╝реНрд░реЗрдо рдкреЙрдЗрдВрдЯрд░ (рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрд░ 10) рд╕реБрд▓рдн рд╣реИред рд╕рдВрдХрд▓рдХ рдмрд┐рдВрджреБ рд╕реЗ рд╕реНрдЯреИрдХ рдкреЙрдЗрдВрдЯрд░ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрд▓рдПрд▓рд╡реАрдПрдо рдЕрдкрдиреЗ рдмреАрдкреАрдПрдл рдмреИрдХрдПрдВрдб рдореЗрдВ рд╕реНрдЯреИрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрд░ 11 рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХрднреА рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рди рддреЛ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рд╕реВрдЪрдХ (рдЖрдИрдкреА) рд╣реИ рдФрд░ рди рд╣реА рд╕реНрдЯреИрдХ рдкреЙрдЗрдВрдЯрд░ (рдПрд╕рдкреА) рд╣реИ, рдФрд░ рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдШрд┐рдбрд░рд╛ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдФрд░ рд╡рд┐рдШрдЯрди рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред cspec
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рд░рдЬрд┐рд╕реНрдЯрд░ рд╕реНрдЯреИрдХрдкреЙрдЗрдВрдЯрд░ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред R10
рдПрдХрдорд╛рддреНрд░ eBPF рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдЯреИрдХ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрд╣ рдлреНрд░реЗрдордкреЙрдЗрдВрдЯ рд╣реИ, рдпрд╣ рд╕реНрдерд┐рд░ рдФрд░ рд╣рдореЗрд╢рд╛ рд╢реВрдиреНрдп рд╣реИред cspec
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ R10
рдкрд░ "рд╕реНрдЯреИрдХрдкреЙрдЗрдВрдЯрд░" рд▓реЗрдмрд▓ рдХреЛ cspec
рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЧрд▓рдд рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рддрдм Ghidra рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рддрджрдиреБрд╕рд╛рд░, рдореВрд▓ рдПрд╕рдкреА рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИ, рдФрд░ рдпрд╣ EBPF рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред
рдЗрд╕рд╕реЗ рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ:
рдШрд┐рджреНрд░рд╛ рдореЗрдВ "рд╕реНрдЯреИрдХ рдбреЗрдкреНрде" рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╢реВрдиреНрдп рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рдПрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдмрд╕ R10
рдЗрди рд╡рд╛рд╕реНрддреБ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕реНрдЯреИрдХрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╢реВрдиреНрдп рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред "рд╕реНрдЯреИрдХ рдбреЗрдкреНрде" рд▓реЗрдмрд▓ "рд╕реНрдЯреИрдХрдкреЙрдЗрдВрдЯрд░" рдХреЗ рд╕рд╛рде рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░реЗрдЧрд╛ред
рдФрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдпреЗ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред
рдирд┐рд░реНрджреЗрд╢ рдЬреЛ R10
рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ (рдЕрд░реНрдерд╛рдд, рд╕реНрдЯреИрдХ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рд╡рд╛рд▓реЗ) рдЕрдХреНрд╕рд░ рд╡рд┐рдШрдЯрд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред Ghidra рдЖрдо рддреМрд░ рдкрд░ рдпрд╣ рдбрд┐рдХреЙрдкрд╛рдЗрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдореГрдд рдХреЛрдб (рдпрд╛рдиреА рд╕реНрдирд┐рдкреЗрдЯ рдЬреЛ рдХрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ) рдорд╛рдирддрд╛ рд╣реИред рдФрд░ рдЪреВрдВрдХрд┐ R10
рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрдИ рд╕реНрдЯреЛрд░ / рд▓реЛрдб рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ Ghidr рджреНрд╡рд╛рд░рд╛ рдбреЗрдбрдХреЛрдб тАЛтАЛрдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдбрд┐рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдПрдХ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕рд╛рде рд╣реА рдПрдХ pspec
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ eBPF рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрддреЗ рдХреА рдЬрдЧрд╣ рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдЧрдИ рдереА, рдЬрд┐рд╕реЗ рдЗрд╢реНрдпреВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдШрд┐рджреНрд░рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдХрд╛рд╕ (рдЬрд╛рд░реА)
.ldefs
рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
eBPF.ldefs <?xml version="1.0" encoding="UTF-8"?> <language_definitions> <language processor="eBPF" endian="little" size="64" variant="default" version="1.0" slafile="eBPF.sla" processorspec="eBPF.pspec" id="eBPF:LE:64:default"> <description>eBPF processor 64-bit little-endian</description> <compiler name="default" spec="eBPF.cspec" id="default"/> <external_name tool="DWARF.register.mapping.file" name="eBPF.dwarf"/> </language> </language_definitions>
.opinion
рдлрд╝рд╛рдЗрд▓ рд▓реЛрдбрд░ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ .opinion
рдХрд░рддреА рд╣реИред
eBPF.opinion <opinions> <constraint loader="Executable and Linking Format (ELF)" compilerSpecID="default"> <constraint primary="247" processor="eBPF" endian="little" size="64" /> </constraint> </opinions>
рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛рдЙрдВрдЯрд░ рдХреЛ .pspec рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди eBPF рдХреЗ рд╕рд╛рде рдпрд╣ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░реЛ рдлреЙрд░реНрдо рдХреЗ рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИред рд╡реИрд╕реЗ, рдИрдкреАрдкреАрдПрдл рдХрд╛ PC
рдЕрдВрдХрдЧрдгрд┐рдд рд╣реИ, рдкрддрд╛ рдирд╣реАрдВ (рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд╛рдЗрдЯ рдирд╣реАрдВ), рдХреВрджрддреЗ рд╕рдордп рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВред
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ eBPF рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрддрд╛ рд╕реНрдерд╛рди рднреА рд╣реИ, рдпрд╣рд╛рдБ рдЙрдиреНрд╣реЗрдВ рд╡рд░реНрдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
eBPF.pspec <?xml version="1.0" encoding="UTF-8"?> <processor_spec> <programcounter register="PC"/> <default_symbols> <symbol name="bpf_unspec" address="syscall:0x0"/> <symbol name="bpf_map_lookup_elem" address="syscall:0x1"/> <symbol name="bpf_map_update_elem" address="syscall:0x2"/> <symbol name="bpf_map_delete_elem" address="syscall:0x3"/> <symbol name="bpf_probe_read" address="syscall:0x4"/> <symbol name="bpf_ktime_get_ns" address="syscall:0x5"/> <symbol name="bpf_trace_printk" address="syscall:0x6"/> <symbol name="bpf_get_prandom_u32" address="syscall:0x7"/> <symbol name="bpf_get_smp_processor_id" address="syscall:0x8"/> <symbol name="bpf_skb_store_bytes" address="syscall:0x9"/> <symbol name="bpf_l3_csum_replace" address="syscall:0xa"/> <symbol name="bpf_l4_csum_replace" address="syscall:0xb"/> <symbol name="bpf_tail_call" address="syscall:0xc"/> <symbol name="bpf_clone_redirect" address="syscall:0xd"/> <symbol name="bpf_get_current_pid_tgid" address="syscall:0xe"/> <symbol name="bpf_get_current_uid_gid" address="syscall:0xf"/> <symbol name="bpf_get_current_comm" address="syscall:0x10"/> <symbol name="bpf_get_cgroup_classid" address="syscall:0x11"/> <symbol name="bpf_skb_vlan_push" address="syscall:0x12"/> <symbol name="bpf_skb_vlan_pop" address="syscall:0x13"/> <symbol name="bpf_skb_get_tunnel_key" address="syscall:0x14"/> <symbol name="bpf_skb_set_tunnel_key" address="syscall:0x15"/> <symbol name="bpf_perf_event_read" address="syscall:0x16"/> <symbol name="bpf_redirect" address="syscall:0x17"/> <symbol name="bpf_get_route_realm" address="syscall:0x18"/> <symbol name="bpf_perf_event_output" address="syscall:0x19"/> <symbol name="bpf_skb_load_bytes" address="syscall:0x1a"/> <symbol name="bpf_get_stackid" address="syscall:0x1b"/> <symbol name="bpf_csum_diff" address="syscall:0x1c"/> <symbol name="bpf_skb_get_tunnel_opt" address="syscall:0x1d"/> <symbol name="bpf_skb_set_tunnel_opt" address="syscall:0x1e"/> <symbol name="bpf_skb_change_proto" address="syscall:0x1f"/> <symbol name="bpf_skb_change_type" address="syscall:0x20"/> <symbol name="bpf_skb_under_cgroup" address="syscall:0x21"/> <symbol name="bpf_get_hash_recalc" address="syscall:0x22"/> <symbol name="bpf_get_current_task" address="syscall:0x23"/> <symbol name="bpf_probe_write_user" address="syscall:0x24"/> </default_symbols> <default_memory_blocks> <memory_block name="eBPFHelper_functions" start_address="syscall:0" length="0x200" initialized="true"/> </default_memory_blocks> </processor_spec>
.sinc
рдлрд╝рд╛рдЗрд▓ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ .sinc
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдлрд╝рд╛рдЗрд▓ рд╣реИ, рд╕рднреА рд░рдЬрд┐рд╕реНрдЯрд░, EBPF рдирд┐рд░реНрджреЗрд╢ рдХреА рд╕рдВрд░рдЪрдирд╛, рдЯреЛрдХрди, рдореЗрдореЛрдирд╛рдорд┐рдХреНрд╕ рдФрд░ рд╕реНрд▓реАрдШ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдпрд╣рд╛рдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред
EBPF.sinc рдЫреЛрдЯрд╛ рд╕реНрдирд┐рдкреЗрдЯ define space ram type=ram_space size=8 default; define space register type=register_space size=4; define space syscall type=ram_space size=2; define register offset=0 size=8 [ R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 PC ]; define token instr(64) imm=(32, 63) signed off=(16, 31) signed src=(12, 15) dst=(8, 11) op_alu_jmp_opcode=(4, 7) op_alu_jmp_source=(3, 3) op_ld_st_mode=(5, 7) op_ld_st_size=(3, 4) op_insn_class=(0, 2) ; #We'll need this token to operate with LDDW instruction, which has 64 bit imm value define token immtoken(64) imm2=(32, 63) ; #To operate with registers attach variables [ src dst ] [ R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 _ _ _ _ _ ]; тАж :ADD dst, src is src & dst & op_alu_jmp_opcode=0x0 & op_alu_jmp_source=1 & op_insn_class=0x7 { dst=dst + src; } :ADD dst, imm is imm & dst & op_alu_jmp_opcode=0x0 & op_alu_jmp_source=0 & op_insn_class=0x7 { dst=dst + imm; } тАж
EBPF рд▓реЛрдбрд░ ELF рд▓реЛрдбрд░ рдХреА рдмреБрдирд┐рдпрд╛рджреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдкрд╣рдЪрд╛рди рд╕рдХреЗ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ Ghidra рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ EBPF рдкреНрд░реЛрд╕реЗрд╕рд░ рд╣реИред рдЙрд╕рдХреЗ рд▓рд┐рдП, ElfConstants
рдШрд┐рдбреНрд░рд╛ рдореЗрдВ рдПрдХ рдмреАрдкреАрдПрдл рд╕реНрдерд┐рд░рд╛рдВрдХ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд▓реЛрдбрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдИрдПрдХреНрд╕рдкреАрдПрдл рдкреНрд░реЛрд╕реЗрд╕рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
eBPF_ElfExtension.java package ghidra.app.util.bin.format.elf.extend; import ghidra.app.util.bin.format.elf.*; import ghidra.program.model.lang.*; import ghidra.util.exception.*; import ghidra.util.task.TaskMonitor; public class eBPF_ElfExtension extends ElfExtension { @Override public boolean canHandle(ElfHeader elf) { return elf.e_machine() == ElfConstants.EM_BPF && elf.is64Bit(); } @Override public boolean canHandle(ElfLoadHelper elfLoadHelper) { Language language = elfLoadHelper.getProgram().getLanguage(); return canHandle(elfLoadHelper.getElfHeader()) && "eBPF".equals(language.getProcessor().toString()) && language.getLanguageDescription().getSize() == 64; } @Override public String getDataTypeSuffix() { return "eBPF"; } @Override public void processGotPlt(ElfLoadHelper elfLoadHelper, TaskMonitor monitor) throws CancelledException { if (!canHandle(elfLoadHelper)) { return; } super.processGotPlt(elfLoadHelper, monitor); } }
рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╣реИрдВрдбрд▓рд░ disassembler рдФрд░ decompiler рдореЗрдВ eBPF рдирдХреНрд╢реЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрдирдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрдИ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдлрд╝рдВрдХреНрд╢рдВрд╕ рдирдХреНрд╢реЗ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╡рд┐рд╡рд░рдгрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдбрд░ LDDW рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдкреИрдЪ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрди рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рд▓рд┐рдП Rn
рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, bpf_map_lookup_elem(тАж)
)ред
рдЗрд╕рд▓рд┐рдП, рд╣реИрдВрдбрд▓рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд░рд┐рд▓реЛрдХреЗрд╢рди рдЯреЗрдмрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ, рд░рд┐рд▓реЛрдХреЗрд╢рди рдПрдбреНрд░реЗрд╕ (рдирд┐рд░реНрджреЗрд╢) рдкрд╛рддрд╛ рд╣реИ, рдФрд░ рдореИрдк рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рднреА рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреАрдХ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рдЗрди рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрддреЗ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдкреИрдЪ рдХрд░рддрд╛ рд╣реИред
eBPF_ElfRelocationHandler.java public class eBPF_ElfRelocationHandler extends ElfRelocationHandler { @Override public boolean canRelocate(ElfHeader elf) { return elf.e_machine() == ElfConstants.EM_BPF; } @Override public void relocate(ElfRelocationContext elfRelocationContext, ElfRelocation relocation, Address relocationAddress) throws MemoryAccessException, NotFoundException { ElfHeader elf = elfRelocationContext.getElfHeader(); if (elf.e_machine() != ElfConstants.EM_BPF) { return; } Program program = elfRelocationContext.getProgram(); Memory memory = program.getMemory(); int type = relocation.getType(); int symbolIndex = relocation.getSymbolIndex(); long value; boolean appliedSymbol = true;

EBPF рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ
рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо eBPF disassembler рдФрд░ decompiler рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ! рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ!
GitHub рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░: Ghidra рдХреЗ рд▓рд┐рдП eBPF ред
рдпрд╣рд╛рдВ рдЬрд╛рд░реА: рдпрд╣рд╛рдВ
рдкреБрдирд╢реНрдЪ
рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд┐рдЯрд▓ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдиреБрд╕рдВрдзрд╛рди рд╡рд┐рднрд╛рдЧ (рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдФрд░ рдирд┐рдХреЛрд▓рд╛рдИ) рдХреЗ рдЖрдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдПред рдореИрдВ рдЖрдкрдХреЛ рдирдорди рдХрд░рддрд╛ рд╣реВрдБ!