Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 209|Απάντηση: 3

[Γνώση ασφάλειας] Σύνδεσμοι με γνώσεις που σχετίζονται με το EBPF

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 2025-10-20 16:47:02 | | |
Αυτή η ανάρτηση επεξεργάστηκε τελευταία φορά από το Summer στις 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框架,探针 *




Προηγούμενος:. Ουρά προτεραιότητας PriorityQueue στο NET6
Επόμενος:AI Agent και AI MCP

σχετικές αναρτήσεις

 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2025-10-20 16:50:38 |
Τόσο οι μονάδες EBPF όσο και οι μονάδες πυρήνα αντιστοιχούν στην πηγή δεδομένων των ανιχνευτών πυρήνα και όχι στην ίδια την EBPF
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2025-10-20 16:59:33 |
Αναφορές Linux: Συγγραφέας Linux του Brother Bird Ταϊβανέζικα

Η σύνδεση με υπερσύνδεσμο είναι ορατή.
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2025-10-20 19:30:47 |
https://www.cnblogs.com/revercc/p/17803876.html
Η σύνδεση μεταξύ του προγράμματος uprobe του eBPF και του kernel/events/uprobe.c είναι ουσιαστικά ότι ο μηχανισμός eBPF επαναχρησιμοποιεί την εγγενή υποδομή uprobe του πυρήνα για να υλοποιήσει τη συνάρτηση hook των συναρτήσεων κατάστασης χρήστη. Συγκεκριμένα, το uprobe του eBPF είναι μια «εφαρμογή» του πλαισίου uprobe του πυρήνα, το οποίο συνδέεται μέσω μιας εσωτερικής αλυσίδας κλήσεων πυρήνα και μιας δομής δεδομένων.
Σύνδεση πυρήνα: Το eBPF βασίζεται στο πλαίσιο uprobe του πυρήνα για την υλοποίηση αγκίστρων
Ο πυρήνας uprobe.c είναι η βασική υλοποίηση του εγγενούς ανιχνευτή κατάστασης χρήστη (uprobe) του πυρήνα Linux και είναι υπεύθυνος για:
Διαχειριστείτε την εγγραφή και την ακύρωση ανιχνευτών κατάστασης χρήστη (π.χ. register_uprobe(), unregister_uprobe()).
Χειρίζεται την εισαγωγή σημείου διακοπής (γράφοντας οδηγίες σημείου διακοπής στη διεύθυνση της συνάρτησης προορισμού, όπως το int3 του x86).
Καταγράψτε συμβάντα ενεργοποίησης σημείου διακοπής (κολλημένα στην επεξεργασία κατάστασης πυρήνα όταν ένα πρόγραμμα εκτελείται σε ένα σημείο διακοπής).
Καλέστε μια προκαταχωρημένη συνάρτηση επανάκλησης (π.χ. λογική αγκίστρου).
Το πρόγραμμα eBPF uprobe (όπως το παράδειγμα του hook libc.so που έγραψες) ουσιαστικά καταχωρεί μια συνάρτηση επανάκλησης eBPF που βασίζεται σε uprobe με τον πυρήνα μέσω του φορτωτή eBPF (π.χ. bcc, libbpf), ο οποίος βασίζεται πλήρως στην υποδομή που παρέχεται από το uprobe.c.
Συγκεκριμένη αλυσίδα κλήσεων: η ροή από το πρόγραμμα eBPF στο uprobe.c
Όταν καταχωρείτε ένα uprobe μέσω ενός φορτωτή eBPF (όπως το attach_uprobe του bcc), η υποκείμενη διαδικασία είναι η εξής:
Ο φορτωτής eBPF εκκινεί ένα αίτημα εγγραφής Ο φορτωτής (όπως ο κώδικας Python του bcc) λέει στον πυρήνα μέσω μιας κλήσης συστήματος (όπως bpf() ή perf_event_open()) ότι "Θέλω να κρεμάσω ένα άγκιστρο eBPF στη συνάρτηση openat του libc.so" και περνά τον bytecode του προγράμματος eBPF.
Επαλήθευση πυρήνα και προετοιμασία προγραμμάτων eBPF Ο επαληθευτής πυρήνα eBPF ελέγχει τη νομιμότητα του προγράμματος για να διασφαλίσει ότι δεν θέτει σε κίνδυνο την ασφάλεια του πυρήνα. Μόλις περάσει, φορτώστε το πρόγραμμα eBPF στον πυρήνα και έχετε μια "συνάρτηση επανάκλησης eBPF" (δηλαδή τη λογική uprobe_openat που γράψατε).
Η επαναχρησιμοποίηση του πυρήνα διεπαφής εγγραφής του uprobe.c θα καλέσει τη συνάρτηση register_uprobe() στο uprobe.c, θα καταχωρήσει ένα "εγγενές uprobe" και θα χρησιμοποιήσει τη συνάρτηση επανάκλησης eBPF ως "χειριστή σκανδάλης" αυτού του uprobe.
Το κλειδί εδώ είναι το εξής: η ουσία του uprobe του eBPF είναι να συνδέσει ένα callback τύπου eBPF στο εγγενές uprobe του πυρήνα.
Το Uprobe.c εισάγει ένα σημείο διακοπής και περιμένει να ενεργοποιηθεί Το Uprobe.c γράφει μια εντολή σημείου διακοπής (όπως το int3 του x86) στη μνήμη κατάστασης του χρήστη με βάση την καταχωρημένη διεύθυνση προορισμού (τη διεύθυνση του openat στο libc.so) και καταγράφει την αρχική εντολή του σημείου διακοπής (για συνέχιση της εκτέλεσης μετά την ενεργοποίηση).
Οι κλήσεις συναρτήσεων ενεργοποιούν σημεία διακοπής, το uprobe.c καλεί επανακλήσεις eBPF Όταν η εφαρμογή καλεί το libc.so:openat, η εκτέλεση της εντολής σημείου διακοπής ενεργοποιεί μια παγίδευση και πέφτει στην κατάσταση του πυρήνα. Αυτή τη στιγμή:
Ο πυρήνας καλεί τη συνάρτηση uprobe_handler() (λογική επεξεργασίας πυρήνα) στο uprobe.c.
Το uprobe_handler() θα ελέγξει τις πληροφορίες εγγραφής που αντιστοιχούν στο σημείο διακοπής και θα διαπιστώσει ότι είναι συνδεδεμένο με μια επανάκληση eBPF, επομένως θα καλέσει το πρόγραμμα eBPF (δηλαδή, το uprobe_openat που γράψατε).
Μετά την εκτέλεση του προγράμματος eBPF (π.χ. συλλογή παραμέτρων, εγγραφή στο ringbuf), το uprobe_handler() επαναφέρει την αρχική εντολή και επιτρέπει στο πρόγραμμα να συνεχίσει την εκτέλεση.
Περίληψη: Η σχέση μεταξύ των δύο
Το kernel/events/uprobe.c είναι η υποκείμενη υποδομή, η οποία παρέχει βασικές δυνατότητες, όπως εισαγωγή, καταγραφή και ανάκτηση σημείων διακοπής κατάστασης χρήστη και αποτελεί τη βάση για όλους τους ανιχνευτές κατάστασης χρήστη (συμπεριλαμβανομένου του eBPF uprobe, του εντοπισμού σφαλμάτων gdb κ.λπ.).
Το πρόγραμμα uprobe του eBPF είναι μια εφαρμογή ανώτερου επιπέδου που βασίζεται σε αυτήν την υποδομή, η οποία καταχωρεί τις λειτουργίες επανάκλησης eBPF και επιτρέπει στον πυρήνα να εκτελεί τη λογική eBPF όταν ενεργοποιείται το uprobe, επιτυγχάνοντας έτσι αποτελεσματική παρακολούθηση λειτουργιών κατάστασης χρήστη.
Εν ολίγοις: το uprobe για το eBPF είναι ο "χρήστης" και το uprobe.c είναι ο "πάροχος υπηρεσιών" και ο πρώτος βασίζεται στον δεύτερο για να ολοκληρώσει την εγγραφή, την ενεργοποίηση και την εκτέλεση των αγκίστρων.
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com