GCC сСга Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° Π·Π°Π΄Π½ΠΈΠ½Π° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜Π° Π½Π° eBPF

Π’ΠΊΠ»ΡƒΡ‡Π΅Π½ΠΎ Π²ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ΠΈ Π½Π° GCC усвоСни ΠΊΠΎΠ΄ Π·Π° ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°ΡšΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π·Π° Ρ‚ΠΎΠ»ΠΊΡƒΠ²Π°Ρ‡ΠΎΡ‚ Π½Π° Π±Π°Ρ˜Ρ‚Π΅ΠΊΠΎΠ΄ Π²Π³Ρ€Π°Π΄Π΅Π½ Π²ΠΎ ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚ Π½Π° Линукс eGMP. Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜Π°, Π±Π°Ρ˜Ρ‚Π΅ΠΊΠΎΠ΄ΠΎΡ‚ Π½Π° Ρ˜Π°Π΄Ρ€ΠΎΡ‚ΠΎ сС ΠΏΡ€Π΅Π²Π΅Π΄ΡƒΠ²Π° Π²ΠΎ Π»Π΅Ρ‚ Π²ΠΎ машински инструкции ΠΈ сС ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° со ΠΈΠ·Π²Π΅Π΄Π±Π° Π½Π° ΠΌΠ°Ρ˜Ρ‡ΠΈΠ½ ΠΊΠΎΠ΄. Π—Π°ΠΊΡ€ΠΏΠΈ со ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° eBPF ΠΏΡ€ΠΈΡ„Π°Ρ‚Π΅Π½ΠΈ Π΄ΠΎ Π³Ρ€Π°Π½ΠΊΠ°Ρ‚Π° ΠΎΠ΄ која сС Ρ€Π°Π·Π²ΠΈΠ²Π° GCC 10 ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ.

ΠŸΠΎΠΊΡ€Π°Ρ˜ Π·Π°Π΄Π½ΠΈΠ½Π°Ρ‚Π° Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΡšΠ΅ Π±Π°Ρ˜Ρ‚Π΅ΠΊΠΎΠ΄, GCC Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° libgcc ΠΏΠΎΡ€Ρ‚Π° Π·Π° eBPF ΠΈ Π°Π»Π°Ρ‚ΠΊΠΈ Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΡšΠ΅ ELF-Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠΎΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π°Π°Ρ‚ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ΄ Π²ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π°Ρ‚Π° машина eBPF ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°Ρ‡ΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΈ ΠΎΠ΄ ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚. Π—Π°ΠΊΡ€ΠΏΠΈ Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π½Π° eBPF Π²ΠΎ GCC Π±Π΅Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ΠΈ ΠΎΠ΄ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈ ΠΎΠ΄ Oracle, ΠΊΠΎΠΈ вСќС Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ˜Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΈ ΠŸΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° eBPF Π²ΠΎ GNU binutils. Π’ΠΎ Ρ€Π°Π·Π²ΠΎΡ˜ сС ΠΈ симулатор ΠΈ Π·Π°ΠΊΡ€ΠΏΠΈ Π·Π° GDB, ΠΊΠΎΠΈ ќС Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Π³ΠΈ Π΄Π΅Π±Π°Π³ΠΈΡ€Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ Π½Π° eBPF Π±Π΅Π· Π΄Π° Π³ΠΈ Π²Ρ‡ΠΈΡ‚ΡƒΠ²Π°Ρ‚Π΅ Π²ΠΎ Ρ˜Π°Π΄Ρ€ΠΎΡ‚ΠΎ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ Π·Π° eBPF ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π°Ρ‚ Π²ΠΎ подмноТСство ΠΎΠ΄ Ρ˜Π°Π·ΠΈΠΊΠΎΡ‚ C, Π΄Π° сС ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°Π°Ρ‚ ΠΈ Π΄Π° сС Π²Ρ‡ΠΈΡ‚Π°Π°Ρ‚ Π²ΠΎ ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚. ΠŸΡ€Π΅Π΄ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ, Ρ‚ΠΎΠ»ΠΊΡƒΠ²Π°Ρ‡ΠΎΡ‚ eBPF Π³ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π° Π±Π°Ρ˜Ρ‚ΠΎΠΊΠΎΠ΄ΠΎΡ‚ Π·Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΈ инструкции ΠΈ Π½Π°ΠΌΠ΅Ρ‚Π½ΡƒΠ²Π° ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚ (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±Π΅Π· јамки).
ΠŸΡ€Π²ΠΈΡ‡Π½ΠΎ, Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° LLVM Π±Π΅Π° користСни Π·Π° ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°ΡšΠ΅ eBPF Π½Π° Linux. ΠŸΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ°Ρ‚Π° Π·Π° eBPF Π²ΠΎ GCC Π΅ интСрСсна Π·Π°Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° користитС Π΅Π΄Π½Π° Π°Π»Π°Ρ‚ΠΊΠ° Π·Π° Π΄Π° Π³ΠΎ ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚ Π½Π° Linux ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ eBPF, Π±Π΅Π· Π΄Π° инсталиратС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ зависности.

Π’ΠΎ Ρ„ΠΎΡ€ΠΌΠ° Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ eBPF, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ Ρ€Π°ΠΊΡƒΠ²Π°Ρ‡ΠΈ со ΠΌΡ€Π΅ΠΆΠ½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π΄Π° Π³ΠΎ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Ρ‚Π΅ ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜ΠΎΡ‚, Π΄Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°Ρ‚Π΅ со пропусниот опсСг, Π΄Π° Π³ΠΈ слСдитС систСмитС, Π΄Π° прСсрСтнуватС систСмски ΠΏΠΎΠ²ΠΈΡ†ΠΈ, Π΄Π° Π³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ‚Π΅ пристапот, Π΄Π° ја Π±Ρ€ΠΎΠΈΡ‚Π΅ Ρ„Ρ€Π΅ΠΊΠ²Π΅Π½Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ ΠΈ Π΄Π° Π²Ρ€ΡˆΠΈΡ‚Π΅ слСдСњС ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ kprobes/uprobes/tracepoints.

Π˜Π·Π²ΠΎΡ€: opennet.ru

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€