ΠΠΊΠ»ΡΡΠ΅Π½ Π² ΠΏΠ°ΠΊΠ΅ΡΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° GCC
Π Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ Π±Π΅ΠΊΠ΅Π½Π΄Π° Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π±Π°ΠΉΡ ΠΊΠΎΠ΄, GCC Π²ΠΊΠ»ΡΡΠ²Π° libgcc ΠΏΠΎΡΡ Π·Π° eBPF ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ELF ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠ°Π²ΡΡ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄ Π²ΡΠ² Π²ΠΈΡΡΡΠ°Π»Π½Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π° Π½Π° eBPF Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΎΡΠΈΠ³ΡΡΠ΅Π½ΠΈ ΠΎΡ ΡΠ΄ΡΠΎΡΠΎ Π·Π°ΡΠ΅ΠΆΠ΄Π°ΡΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π°. ΠΠ°ΡΠΎΠ²Π΅ΡΠ΅ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° eBPF Π² GCC Π±ΡΡ
Π° ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΈ ΠΎΡ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈ ΠΎΡ Oracle, ΠΊΠΎΠΈΡΠΎ Π²Π΅ΡΠ΅ Π±ΡΡ
Π°
ΠΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ Π·Π° eBPF ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ Π² ΠΏΠΎΠ΄Π³ΡΡΠΏΠ° Π½Π° Π΅Π·ΠΈΠΊΠ° C, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈ ΠΈ Π·Π°ΡΠ΅Π΄Π΅Π½ΠΈ Π² ΡΠ΄ΡΠΎΡΠΎ. ΠΡΠ΅Π΄ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡΡ Π½Π° eBPF ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° Π±Π°ΠΉΡ ΠΊΠΎΠ΄Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈ Π½Π°Π»Π°Π³Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° Π²ΡΡΡ
Ρ ΠΊΠΎΠ΄Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π±Π΅Π· ΡΠΈΠΊΠ»ΠΈ).
ΠΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° eBPF Π² Linux Π±ΡΡ
Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° LLVM. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° eBPF Π² GCC Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°, Π·Π°ΡΠΎΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π΅Π΄ΠΈΠ½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ΄ΡΠΎΡΠΎ Π½Π° Linux ΠΈ eBPF ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅, Π±Π΅Π· Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
ΠΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° eBPF ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΎΡΠΈ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π΄Π° ΡΠΈΠ»ΡΡΠΈΡΠ°ΡΠ΅ ΡΡΠ°ΡΠΈΠΊ, Π΄Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΡΠ΅ ΡΠ΅ΡΡΠΎΡΠ½Π° Π»Π΅Π½ΡΠ°, Π΄Π° Π½Π°Π±Π»ΡΠ΄Π°Π²Π°ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ, Π΄Π° ΠΏΡΠΈΡ Π²Π°ΡΠ°ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ, Π΄Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ°, Π΄Π° Π±ΡΠΎΠΈΡΠ΅ ΡΠ΅ΡΡΠΎΡΠ°ΡΠ° ΠΈ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ ΠΈ Π΄Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° kprobes/uprobes/tracepoints.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru