Перейти к содержанию

Исполняемый файл — это база данных SQLite

7.0/10

В статье на fzakaria.com от 23 августа 2026 года исследуется идея рассматривать исполняемые файлы как базы данных SQLite: ELF описывается как «уже база данных», а механизм виртуальных таблиц SQLite предлагается использовать для инспекции и потенциальной унификации бинарных форматов. Автор разбирает устройство ELF, объясняет, почему формат трудно модифицировать из-за плотной упаковки и отсутствия самоописывающей схемы, и обсуждает компромиссы между копированием и отображением памяти. Материал не является отраслевым прорывом, но даёт практическую пользу для системного программирования и проектирования файловых форматов.

Контекст

SQLite хранит базу данных в одном файле с собственным двоичным форматом, который включает 4-байтовый идентификатор приложения (application ID), расположенный на 68-м байте файла; этот идентификатор обычно используется для однозначного определения типа файла. Идея автора состоит в том, чтобы записать в это поле значение «SELF» (Structured Executable & Linkable Format) и встроить компоненты ELF-исполняемого файла в структуру базы данных, благодаря чему один и тот же файл может одновременно быть и SQLite-базой, и исполняемым бинарником в Linux. Дополнительно SQLite поддерживает виртуальные таблицы, позволяющие «монтировать» произвольные источники данных и обращаться к ним через SQL, что делает такой подход естественным для инспекции и унификации форматов файлов.

Влияние

Для системных программистов и разработчиков инструментов статья предлагает конкретный способ выполнять SQL-запросы к ELF-файлам через виртуальные таблицы SQLite, что может упростить инспекцию и анализ бинарных форматов; однако практическое применение сдерживается компромиссом между копированием и отображением памяти.

Обсуждение

Комментаторы в целом согласны, что ELF можно рассматривать как базу данных, и высоко оценивают механизм виртуальных таблиц SQLite; при этом высказываются и возражения: один участник называет единственным препятствием выбор между копированием и отображением памяти, другой сомневается, зачем нужен именно SQLite, а не SQL-движок поверх объектного файла. Также отмечается, что ELF — не уникальный случай: PE/COFF и .NET assembly тоже устроены как реляционные базы данных.

Источники

Покрытие источниками

Проверяются выбранные ключевые утверждения, а не истинность всей статьи целиком.

  1. Частный опыт или мнение; проверено только авторство

    Исполняемый файл — это база данных SQLite