Π ΡΠΎΡΡΠ°Π² Π½Π°Π±ΠΎΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² 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