Фреймворк SELF замінює заголовки бінарників ELF на бази даних SQLite із підтримкою SQL-запитів
Прототип із відкритим кодом SELF перетворює виконувані файли Linux ELF у файли баз даних SQLite3. Розробники можуть аналізувати заголовки, видаляти секції через транзакції SQL та налаштовувати динамічне лінкування.

Вплив: Середній
Чому це важливо
Заміна жорстких бінарних форматів реляційними схемами перетворює аналіз та модифікацію ELF-файлів на декларативні SQL-запити.
TL;DR
- 01Виконувані бінарні файли можна зберігати у вигляді реляційних баз даних.
- 02Модифікація бінарників та заміна залежностей зводяться до стандартних команд SQL.
- 03Підсистема Linux binfmt_misc дозволяє прозоро запускати нестандартні файлові формати.
Ключові факти
- Ідентифікатор додатка SQLite
- 0x53454c46 ('SELF')
- Аналог утиліти strip
- DELETE FROM sections; DELETE FROM notes; VACUUM;
- Інтеграція з ядром
- binfmt_misc + завантажувач self-exec
- Інтерфейс аудиту
- glibc rtld-audit (libself-audit.so)
Структура бінарника як реляційна таблиця
Файли ELF вручну реалізують примітиви баз даних: інтернування стрічок, пошук зсувів та фільтри Блума (.gnu.hash). Проект SELF замінює цю складність базою даних SQLite 3. Для запуску бінарника потрібні дві таблиці: self_meta (заголовки) та segments (байти сегментів пам'яті).
SQL-запити для інспектування та модифікації
Зміна метаданих перетворюється на транзакційний SQL замість небезпечної маніпуляції зсувами файлу:
- Перегляд імпорту:
SELECT name, version FROM imports; - Список залежностей:
SELECT ord, soname FROM ldd; - Очищення метаданих:
DELETE FROM sections; DELETE FROM notes; VACUUM;
Інтеграція з ядром Linux
Запуск працює через підсистему Linux binfmt_misc. Зареєструвавши сигнатуру SQLite з тегом SELF, ядро передає запуск інтерпретатору self-exec. Спеціальний завантажувач на C зчитує заголовки з SQLite, мапить сегменти у пам'ять через mmap і здійснює перехід на точку входу.
Спробуй за 2 хвилини
sqlite3 hello 'SELECT name, version FROM imports LIMIT 3;'bash
✓ Коли використовувати
- Дослідження інспектування символів бінарників та аналізу залежностей через SQL у Linux.
- Створення низькорівневих інструментів розробки та хуків пакувальника NixOS.
✕ Коли НЕ варто
- Продакшн-розгортання бінарників з вимогами до мінімального накладного витрачання пам'яті.
- Крос-компіляція для систем без підтримки binfmt_misc або libsqlite3.
Що зробити сьогодні
- Склонуйте репозиторій SELF для експериментів з утилітою elf2self на Linux.
- Спробуйте виконати SQL-запити до таблиці символів бінарного файла через sqlite3 CLI.
Джерела