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