Расширение реализует поддержку архитектуры eBPF для Ghidra и позволяет дизассемблировать и декомпилировать программы eBPF.
С мая 2023 года eBPF-for-Ghidra включен в официальный репозиторий NationalSecurityAgency/Ghidra .
Вы можете получить последние обновления и исправления для модуля eBPF непосредственно в Ghidra.
Это репо может быть заархивировано в будущем.
Пример программы eBPF вы можете получить здесь.
Пример дизассемблирования и декомпиляции eBPF:
File → Install Extensions...
GHIDRA_INSTALL_DIR=${GHIDRA_HOME} gradle
и используйте Ghidra для его установки: File → Install Extensions...
GhidraExtensions
.03.09.2019 — реализация карт eBPF, реализован собственный обработчик перемещения
19.09.2019 — решена проблема со стеком
20.09.2019 — хелперы вызова eBPF реализованы как системные вызовы, добавлена подпись хелпера через собственный eBPFAnalyzer
23.09.2019 — исправлены плохие закладки
01.12.2020 — добавлены новые eBPF-помощники
23.06.2022 — добавлена поддержка относительных вызовов (тип перемещения R_BPF_64_32
). Спасибо @cnwangjihe за эту идею. imm
инструкции вызова, где bpf_call->src_reg == BPF_PSEUDO_CALL
теперь содержит относительное смещение целевой функции.
До:
После:
24.06.2022 — оформление Pull Request в официальный репозиторий Ghidra как основного поставщика процессора eBPF.
19.12.2022 — добавлена поддержка операций BPF_ATOMIC, добавлены инструкции ALU32, добавлены инструкции BPF_JMP32, исправлена инструкция JSET
05.03.2023 — в официальный репозиторий Ghidra добавлена поддержка процессора eBPF в коммите 506ca1e
Начиная с Ghidra 10.3, модуль eBPF включен в Ghidra по умолчанию. Больше нет необходимости создавать этот проект и добавлять его как расширение Ghidra. Для пользователей более старых версий Ghidra доступ к модулю eBPF по-прежнему возможен через существующие выпуски.
Официальная документация ядра
Официальная документация ядра – вопросы
Программы eBPF для тестирования в Ghidra
Простой дизассемблер eBPF в Rust
Виртуальная машина Rust и JIT-компилятор для программ eBPF
помощники eBPF (все)
Обзор eBPF