Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 209|Jawab: 3

[Pengetahuan Keselamatan] Tautan ke pengetahuan terkait EBPF

[Salin tautan]
Dipaparkan pada 2025-10-20 16:47:02 | | |
Posting ini terakhir diedit oleh Musim panas pada 2025-10-21 09:20

https://github.com/iovisor/bcc/blob/master/docs/kernel-versions.md  ebpf对应的 内核版本特性 能解决什么问题 *
https://lore.kernel.org/bpf/ ebpf对应的内核ebpf补丁的信息讨论 *
https://juejin.cn/post/7084515511576313864 linux tracing system 各种tracing框架的对比 分为前端,tracing框架,探针 *




Mantan:. Antrean prioritas PriorityQueue di NET6
Depan:Agen AI dan AI MCP
 Tuan tanah| Dipaparkan pada 2025-10-20 16:50:38 |
Baik EBPF dan modul kernel sesuai dengan sumber data probe kernel, bukan EBPF sendiri
 Tuan tanah| Dipaparkan pada 2025-10-20 16:59:33 |
Referensi Linux: Penulis Linux Brother Bird Bahasa Taiwan

Login hyperlink terlihat.
 Tuan tanah| Dipaparkan pada 2025-10-20 19:30:47 |
https://www.cnblogs.com/revercc/p/17803876.html
Hubungan antara program uprobe eBPF dan kernel/events/uprobe.c pada dasarnya adalah bahwa mekanisme eBPF menggunakan kembali infrastruktur uprobe asli kernel untuk mengimplementasikan fungsi hook dari fungsi status pengguna. Secara khusus, uprobe eBPF adalah "aplikasi" dari kerangka kerja uprobe kernel, yang dihubungkan melalui rantai panggilan kernel internal dan struktur data.
Koneksi inti: eBPF mengandalkan kerangka kerja uprobe kernel untuk mengimplementasikan kait
Kernel uprobe.c adalah implementasi inti dari probe status pengguna asli kernel Linux (uprobe) dan bertanggung jawab untuk:
Mengelola pendaftaran dan pembatalan pemeriksaan status pengguna (misalnya, register_uprobe(), unregister_uprobe()).
Menangani penyisipan titik henti (menulis instruksi titik henti ke alamat fungsi target, seperti int3 x86).
Menangkap peristiwa pemicu titik henti (macet dalam pemrosesan status kernel saat program dijalankan ke titik henti).
Memanggil fungsi callback yang telah didaftarkan sebelumnya (yaitu logika hook).
Program uprobe eBPF (seperti contoh hook libc.so yang Anda tulis) pada dasarnya mendaftarkan fungsi callback eBPF berbasis uprobe dengan kernel melalui loader eBPF (misalnya, bcc, libbpf), yang sepenuhnya bergantung pada infrastruktur yang disediakan oleh uprobe.c.
Rantai panggilan khusus: aliran dari program eBPF ke uprobe.c
Saat Anda mendaftarkan uprobe melalui loader eBPF (seperti attach_uprobe bcc), proses yang mendasarinya adalah sebagai berikut:
Loader eBPF memulai permintaan pendaftaran Loader (seperti kode Python bcc) memberi tahu kernel melalui panggilan sistem (seperti bpf() atau perf_event_open()) bahwa "Saya ingin menggantung kait eBPF pada fungsi openat libc.so" dan meneruskan bytecode program eBPF.
Verifikasi Kernel dan Persiapan Program eBPF Verifikator eBPF kernel memeriksa legitimasi program untuk memastikannya tidak membahayakan keamanan kernel. Setelah dilewati, muat program eBPF ke dalam kernel dan miliki "fungsi callback eBPF" (yaitu logika uprobe_openat yang Anda tulis).
Penggunaan kembali kernel antarmuka pendaftaran uprobe.c akan memanggil fungsi register_uprobe() di uprobe.c, mendaftarkan "uprobe asli", dan menggunakan fungsi callback eBPF sebagai "penangan pemicu" dari uprobe ini.
Kuncinya di sini adalah ini: esensi dari uprobe eBPF adalah untuk mengikat callback tipe eBPF ke uprobe asli kernel.
uprobe.c menyisipkan titik henti dan menunggunya dipicu Uprobe.c menulis instruksi titik henti (seperti int3 x86) ke memori status pengguna berdasarkan alamat target terdaftar (alamat openat di libc.so), dan merekam instruksi asli titik henti (untuk melanjutkan eksekusi setelah pemicuan).
Fungsi memanggil titik henti pemicu uprobe.c memanggil callback eBPF Saat aplikasi memanggil libc.so:openat, mengeksekusi instruksi titik henti memicu jebakan dan jatuh ke dalam status kernel. Pada saat ini:
Kernel memanggil fungsi uprobe_handler() (logika pemrosesan kernel) di uprobe.c.
uprobe_handler() akan memeriksa informasi pendaftaran yang sesuai dengan titik henti dan menemukan bahwa itu terikat ke panggilan balik eBPF, sehingga akan memanggil program eBPF (yaitu, uprobe_openat yang Anda tulis).
Setelah program eBPF dijalankan (misalnya, mengumpulkan parameter, menulis ke ringbuf), uprobe_handler() mengembalikan instruksi asli dan memungkinkan program untuk melanjutkan eksekusi.
Ringkasan: Hubungan antara keduanya
kernel/events/uprobe.c adalah infrastruktur yang mendasarinya, yang menyediakan kemampuan inti seperti penyisipan, penangkapan, dan pemulihan titik henti status pengguna, dan merupakan dasar untuk semua probe status pengguna (termasuk eBPF uprobe, debugging gdb, dll.).
Program uprobe eBPF adalah aplikasi lapisan atas berdasarkan infrastruktur ini, yang mendaftarkan fungsi callback eBPF dan memungkinkan kernel untuk mengeksekusi logika eBPF saat uprobe dipicu, sehingga mencapai pelacakan fungsi status pengguna yang efisien.
Singkatnya: uprobe untuk eBPF adalah "pengguna" dan uprobe.c adalah "penyedia layanan", dan yang pertama mengandalkan yang terakhir untuk menyelesaikan pendaftaran, pemicuan, dan eksekusi kait.
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com