Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 209|Ответ: 3

[Знания о безопасности] Ссылки на знания, связанные с EBPF

[Скопировать ссылку]
Опубликовано 2025-10-20 16:47:02 | | |
Этот пост был последний раз отредактирован Саммер 21.10.2025 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框架,探针 *




Предыдущий:. Приоритетная очередь приоритета в NET6
Следующий:ИИ-агент и ИИ MCP

Связанные публикации

 Хозяин| Опубликовано 2025-10-20 16:50:38 |
И EBPF, и модули ядра соответствуют источнику данных ядреных зондов, а не собственному EBPF
 Хозяин| Опубликовано 2025-10-20 16:59:33 |
Ссылки на Linux: Автор Brother Bird's Linux, тайваньский

Вход по гиперссылке виден.
 Хозяин| Опубликовано 2025-10-20 19:30:47 |
https://www.cnblogs.com/revercc/p/17803876.html
Связь между программой uprobe в eBPF и kernel/events/uprobe.c по сути заключается в том, что механизм eBPF повторно использует встроенную инфраструктуру обновления ядра для реализации функции hook функций состояния пользователя. В частности, uprobe eBPF — это «приложение» фреймворка ядра, которая связана внутренней цепочкой вызовов ядра и структурой данных.
Основное соединение: eBPF использует фреймворк обновления ядра для реализации хуков
Ядро uprobe.c является основной реализацией натурного мониторинга состояния пользователя ядра Linux (uprobe) и отвечает за:
Управление регистрацией и отменой зондов в пользовательском состоянии (например, register_uprobe(), unregister_uprobe()).
Обрабатывает вставку точки прерывания (запись инструкций по адресу целевой функции, например, int3 в x86).
Захват событий триггера точки остановки (застревающие в обработке состояния ядра при выполнении программы в точке остановки).
Вызовите заранее зарегистрированную функцию обратного вызова (то есть логику хука).
Программа обновления eBPF (например, в примере hook libc.so, который вы написали) по сути регистрирует функцию обратного вызова eBPF на основе обновления с ядром через загрузчик eBPF (например, bcc, libbpf), который полностью зависит от инфраструктуры, предоставляемой uprobe.c.
Специфическая цепочка вызовов: поток от программы eBPF к uprobe.c
Когда вы регистрируете обшивку через загрузчик eBPF (например, attach_uprobe bcc), основной процесс выглядит следующим образом:
Загрузчик eBPF инициирует запрос на регистрацию. Загрузчик (например, код на Python от bcc) сообщает ядру через системный вызов (например, bpf() или perf_event_open()), что «Я хочу подвесить крюк eBPF на функцию openat libc.so» и передаёт байткод программы eBPF.
Проверка и подготовка программ eBPF ядра Верификатор ядра eBPF проверяет легитимность программы, чтобы убедиться, что она не нарушает безопасность ядра. После передачи загрузите программу eBPF в ядро и получите «функцию обратного вызова eBPF» (то есть uprobe_openat логику, которую вы написали).
Повторное использование ядра интерфейса регистрации uprobe.c вызовет функцию register_uprobe() в uprobe.c, регистрирует «нативный uprobe» и использует функцию обратного вызова eBPF в качестве «триггера» этого апроба.
Ключевой момент здесь таков: суть верхнего оформления eBPF заключается в привязке обратного вызова типа eBPF к нативному оформлению ядра.
uprobe.c вставляет точку остановки и ждёт её срабатывания. Uprobe.c записывает команду точки остановки (например, int3 из x86) в память состояния пользователя на основе зарегистрированного целевого адреса (адрес openat в libc.so) и записывает исходную инструкцию точки остановки (для возобновления выполнения после запуска).
Функция вызывает trigger breakpoints, uprobe.c вызывает eBPF-callback Когда приложение вызывает libc.so:openat, выполнение инструкции breakpoint вызывает ловушку и попадает в состояние ядра. На данный момент:
Ядро вызывает функцию uprobe_handler() (логика обработки ядра) в uprobe.c.
uprobe_handler() проверит регистрационную информацию, соответствующую точке остановки, и обнаруживает, что она связана с eBPF-callback, поэтому вызовет программу eBPF (то есть uprobe_openat, которую вы написали).
После выполнения программы eBPF (например, сбора параметров, записи в ringbuf) uprobe_handler() восстанавливает исходную инструкцию и позволяет программе продолжить выполнение.
Резюме: Взаимоотношения между ними
kernel/events/uprobe.c — это базовая инфраструктура, обеспечивающая основные возможности, такие как вставка, захват и восстановление точек остановки состояния пользователя, и служит основой для всех зондов состояния пользователя (включая обновление eBPF, отладку gdb и др.).
Программа uprobe eBPF — это приложение верхнего уровня, основанное на этой инфраструктуре, которое регистрирует функции обратного вызова eBPF и позволяет ядру выполнять логику eBPF при запуске uprobe, обеспечивая эффективное отслеживание состояния пользовательских функций.
Короче говоря: uprobe для eBPF — это «пользователь», а uprobe.c — «поставщик услуг», при этом первый зависит от второго для регистрации, запуска и выполнения хуков.
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com