GCC рдордзреНрдпреЗ рдЖрддрд╛ eBPF рдордзреНрдпреЗ рд╕рдВрдХрд▓рдирд╛рд╕рд╛рдареА рдмреЕрдХрдПрдВрдб рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ

GCC рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реВрдЯ рдордзреНрдпреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рджрддреНрддрдХ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓рдордзреНрдпреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдмрд╛рдЗрдЯрдХреЛрдб рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯрд░рд╕рд╛рдареА рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдВрдХрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЛрдб рдИрдмреАрдкреАрдПрдл. JIT рд╕рдВрдХрд▓рдирд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓реНрдпрд╛рдмрджреНрджрд▓ рдзрдиреНрдпрд╡рд╛рдж, рдХрд░реНрдирд▓ рдмрд╛рдпрдХреЛрдбрдЪреЗ рднрд╛рд╖рд╛рдВрддрд░ рдорд╢реАрдирдЪреНрдпрд╛ рд╕реВрдЪрдирд╛рдВрдордзреНрдпреЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ рдореВрд│ рдХреЛрдбрдЪреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрд╕рд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ. eBPF рд╕рдорд░реНрдердирд╛рд╕рд╣ рдкреЕрдЪ рд╕реНрд╡реАрдХрд╛рд░рд▓реЗ рдЬреНрдпрд╛ рд╢рд╛рдЦреЗрддреВрди GCC 10 рд░рд┐рд▓реАрдЭ рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ.

рдмрд╛рдЗрдЯрдХреЛрдб рдЬрдирд░реЗрд╢рдирд╕рд╛рдареА рдмреЕрдХрдПрдВрдб рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, GCC рдордзреНрдпреЗ eBPF рд╕рд╛рдареА libgcc рдкреЛрд░реНрдЯ рдЖрдгрд┐ ELF рдлрд╛рдЗрд▓реНрд╕ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЯреВрд▓реНрд╕ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗрдд рдЬреЗ рдХрд░реНрдирд▓-рдкреНрд░рджрд╛рди рдХреЗрд▓реЗрд▓реЗ рд▓реЛрдбрд░ рд╡рд╛рдкрд░реВрди eBPF рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирдордзреНрдпреЗ рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреЗ рд╢рдХреНрдп рдХрд░рддрд╛рдд. GCC рдордзреНрдпреЗ eBPF рдЪреЗ рд╕рдорд░реНрдерди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреЕрдЪреЗрд╕ Oracle рдордзреАрд▓ рдЕрднрд┐рдпрдВрддреНрдпрд╛рдВрдиреА рддрдпрд╛рд░ рдХреЗрд▓реЗ рд╣реЛрддреЗ, рдЬреНрдпрд╛рдВрдиреА рдЖрдзреАрдЪ рддрдпрд╛рд░ рдХреЗрд▓реЗ рд╣реЛрддреЗ рдкреНрд░рджрд╛рди рдХреЗрд▓реЗ GNU binutils рдордзреНрдпреЗ eBPF рд╕рдорд░реНрдерди. GDB рд╕рд╛рдареА рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдЖрдгрд┐ рдкреЕрдЪреЗрд╕ рджреЗрдЦреАрд▓ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдд рдЖрд╣реЗрдд, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ eBPF рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕ рдХрд░реНрдирд▓рдордзреНрдпреЗ рд▓реЛрдб рди рдХрд░рддрд╛ рдбреАрдмрдЧ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддрд╛рдд.

eBPF рд╕рд╛рдареА рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕ C рднрд╛рд╖реЗрдЪреНрдпрд╛ рдЙрдкрд╕рдВрдЪрдордзреНрдпреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд, рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рдХрд░реНрдирд▓рдордзреНрдпреЗ рд▓реЛрдб рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рдИрдмреАрдкреАрдПрдл рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯрд░ рдкрд░рд╡рд╛рдирдЧреА рджрд┐рд▓реЗрд▓реНрдпрд╛ рд╕реВрдЪрдирд╛рдВрдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рд╕рд╛рдареА рдмрд╛рдпрдХреЛрдб рддрдкрд╛рд╕рддреЛ рдЖрдгрд┐ рдХреЛрдбрд╡рд░ рдХрд╛рд╣реА рдирд┐рдпрдо рд▓рд╛рдЧреВ рдХрд░рддреЛ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд▓реВрдк рдирд╛рд╣реАрдд).
рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛, Linux рд╡рд░ eBPF рд╕рдВрдХрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА LLVM-рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдзрдиреЗ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдд рд╣реЛрддреА. GCC рдордзреАрд▓ eBPF рд╕рдорд░реНрдерди рдордиреЛрд░рдВрдЬрдХ рдЖрд╣реЗ рдХрд╛рд░рдг рддреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрд╡рд▓рдВрдмрди рд╕реНрдерд╛рдкрд┐рдд рди рдХрд░рддрд╛, Linux рдХрд░реНрдирд▓ рдЖрдгрд┐ eBPF рдкреНрд░реЛрдЧреНрд░рд╛рдо рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдЯреВрд▓рдХрд┐рдЯ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ.

eBPF рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕рдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд, рддреБрдореНрд╣реА рдиреЗрдЯрд╡рд░реНрдХ рдСрдкрд░реЗрд╢рди рд╣рдБрдбрд▓рд░ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛, рдЯреНрд░реЕрдлрд┐рдХ рдлрд┐рд▓реНрдЯрд░ рдХрд░реВ рд╢рдХрддрд╛, рдмрдБрдбрд╡рд┐рдбреНрде рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВ рд╢рдХрддрд╛, рд╕рд┐рд╕реНрдЯрдо рдореЙрдирд┐рдЯрд░ рдХрд░реВ рд╢рдХрддрд╛, рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд░реВ рд╢рдХрддрд╛, рдкреНрд░рд╡реЗрд╢ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реВ рд╢рдХрддрд╛, рдСрдкрд░реЗрд╢рдирдЪреА рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ рдЖрдгрд┐ рд╡реЗрд│ рдореЛрдЬреВ рд╢рдХрддрд╛ рдЖрдгрд┐ kprobes/uprobes/tracepoints рд╡рд╛рдкрд░реВрди рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХрд░реВ рд╢рдХрддрд╛.

рд╕реНрддреНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛