Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 209|Yanıt: 3

[Güvenlik bilgisi] EBPF ile ilgili bilgiye bağlantılar

[Bağlantıyı kopyala]
2025-10-20 tarihinde 16:47:02 tarihinde yayınlandı | | |
Bu gönderi en son 2025-10-21 09:20 tarihinde Summer tarafından düzenlenmiştir

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框架,探针 *




Önceki:. NET6'da PriorityQueue öncelik kuyruğu
Önümüzdeki:Yapay Zeka Ajanı ve Yapay Zeka MCP

İlgili Yazılar

 Ev sahibi| 2025-10-20 tarihinde 16:50:38 tarihinde yayınlandı |
Hem EBPF hem de çekirdek modülleri, çekirdek problarının veri kaynağına karşılık gelir, EBPF'nin kendi kaynağına değil
 Ev sahibi| 2025-10-20 tarihinde 16:59:33 tarihinde yayınlandı |
Linux Referansları: Kardeş Bird'ün Linux Yazarı Tayvanlı

Bağlantı girişi görünür.
 Ev sahibi| 2025-10-20 19:30:47 tarihinde yayınlandı |
https://www.cnblogs.com/revercc/p/17803876.html
eBPF'nin uprobe programı ile kernel/events/uprobe.c arasındaki bağlantı, esasen eBPF mekanizmasının çekirdeğin doğal uprobe altyapısını kullanıcı durumu fonksiyonlarının hook fonksiyonunu uygulamak için yeniden kullanmasıdır. Özellikle, eBPF'nin uprobe'u, iç çekirdek çağrı zinciri ve veri yapısı üzerinden bağlanan çekirdek uprobe çerçevesinin bir "uygulamasıdır".
Çekirdek bağlantı: eBPF, kancaları uygulamak için çekirdek uprobe çerçevesine dayanır
Çekirdek uprobe.c, Linux çekirdeğinin yerel kullanıcı durumu probe'nun (uprobe) temel uygulamasıdır ve şu amaçlardan sorumludur:
Kullanıcı durumu problarının kaydı ve iptalini yönetin (örneğin, register_uprobe(), unregister_uprobe()).
Kesme noktası eklemesini (örneğin x86'nın int3'ü gibi hedef fonksiyon adresine kesme noktası komutları yazma) yönetir.
Kesme noktası tetikleme olaylarını yakalayın (bir program bir kesme noktasına çalıştırıldığında çekirdek durumu işlemede sıkışıp kalır).
Önceden kayıtlı bir geri çağırma fonksiyonunu (yani hook mantığı) çağırın.
eBPF uprobe programı (örneğin sizin yazdığınız hook libc.so örneğin) temelde uprobe tabanlı bir eBPF geri çağırma fonksiyonunu çekirdekle eBPF yükleyicisi (örneğin, bcc, libbpf) üzerinden kaydeder; bu da tamamen uprobe.c'nin sağladığı altyapıya dayanır.
Özel çağrı zinciri: eBPF programından uprobe.c'ye akış
Bir uProbe eBPF yükleyicisi üzerinden (örneğin bcc'nin attach_uprobe'i gibi) kayıt yaptığınızda, temel süreç şöyledir:
eBPF yükleyicisi kayıt talebi başlatır Yükleyici (örneğin bcc'nin Python kodu) bir sistem çağrısı (örneğin bpf() veya perf_event_open()) aracılığıyla çekirdeğe "libc.so'nin openat fonksiyonuna bir eBPF kancası asmak istiyorum" söyler ve eBPF programının bayt kodunu iletir.
eBPF Programlarının Çekirdek Doğrulaması ve Hazırlanması Çekirdek eBPF doğrulayıcısı, programın çekirdek güvenliğini tehlikeye atmadığından emin olmak için meşruiyetini kontrol eder. Geçtikten sonra, eBPF programını çekirdeğe yükleyin ve bir "eBPF geri çağırma fonksiyonu" (yani yazdığınız uprobe_openat mantığı) oluşturun.
uprobe.c'nin kayıt arayüzü çekirdeğinin yeniden kullanımı, uprobe.c'deki register_uprobe() fonksiyonunu çağırır, "yerel uprobe" kaydeder ve eBPF geri çağrı fonksiyonunu bu uprobe'un "tetikleyicisi" olarak kullanır.
Buradaki anahtar şu: eBPF'nin uprobe'unun özü, eBPF tipinin geri çağrısını çekirdeğin doğal uprobe'una bağlamaktır.
uprobe.c bir breakpoint ekler ve tetiklenmesini bekler. Uprobe.c, kayıtlı hedef adrese (libc.so'daki openat adresi) göre kullanıcının durum belleğine bir kesme noktası komutu (örneğin x86'nın int3'ü gibi) yazar ve kesme noktasının orijinal komutunu (tetiklendikten sonra çalıştırmaya devam etmek için) kaydeder.
Fonksiyon çağrıları breakpoint'leri tetikler, uprobe.c eBPF geri çağrılarını çağırır Uygulama libc.so:openat çağrısı yaptığında, breakpoint komutu çalıştırıldığında bir tuzak tetiklenir ve çekirdek durumuna düşer. Şu anda:
Çekirdek, uprobe.c'de uprobe_handler() fonksiyonunu (çekirdek işleme mantığı) çağırır.
uprobe_handler() kırılma noktasına karşılık gelen kayıt bilgilerini kontrol eder ve bunun bir eBPF geri çağrısına bağlı olduğunu görür, böylece eBPF programını (yani sizin yazdığınız uprobe_openat çağırır.
eBPF programı yürütüldükten sonra (örneğin, parametreler toplamak, ringbuf'a yazmak), uprobe_handler() orijinal komutu geri getirir ve programın yürütmeye devam etmesine izin verir.
Özet: İkisi arasındaki ilişki
kernel/events/uprobe.c, kullanıcı durumu kesme noktalarının eklenmesi, yakalanması ve kurtarılması gibi temel yetenekler sağlayan temel altyapıdır ve tüm kullanıcı durumu problarının (eBPF uprobe, gdb hata ayıklama vb. dahil) temelini oluşturur.
eBPF'nin uprobe programı, bu altyapıya dayanan üst katman bir uygulamadır; eBPF geri çağrı fonksiyonlarını kaydeder ve uprobe tetiklendiğinde çekirdeğin eBPF mantığını çalıştırmasına olanak tanır, böylece kullanıcı durumu fonksiyonlarının verimli bir şekilde takip edilmesini sağlar.
Kısaca: eBPF için uprobe "kullanıcı", uprobe.c ise "hizmet sağlayıcı"dır ve ilki, kancaların kaydı, tetiklenmesi ve yürütülmesini tamamlamak için ikincisine dayanır.
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com