Фреймворк 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.