你的可执行文件是一个SQLite数据库

Simon Willison's Blog 新闻

摘要

一篇博客文章解释了一种Linux模式,其中SQLite数据库文件被格式化为ELF可执行文件,使用自定义解释器和binfmt_misc实现直接执行。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/08/24 12:28

# 你的可执行文件其实是个SQLite数据库 来源:https://simonwillison.net/2026/Aug/24/your-executable-is-a-sqlite-database/ 2026年8月24日 \- 链接博客 **你的可执行文件其实是个SQLite数据库 (https://fzakaria.com/2026/08/23/your-executable-is-a-sqlite-database)**\(via (https://news.ycombinator.com/item?id=49415271)\) Farid Zakaria 描述了一个巧妙的 Linux 模式,可以创建一个 SQLite 数据库文件并将其直接作为可执行二进制文件使用。 该技巧将 SQLite 文件格式的 4 字节应用程序 ID(位于文件内偏移 68 字节处)设置为 "SELF",代表结构化可执行与可链接格式(Structured Executable & Linkable Format)。随后,ELF 可执行文件格式的各个组成部分被安排到多个不同的 SQLite 表中,使用的模式(Schema)如下:(https://github.com/fzakaria/selfdb/blob/main/schema/self.sql)。 他们的`self-exec`解释器(C 代码在此 (https://github.com/fzakaria/selfdb/blob/main/loader/self-exec.c))随后可以提取并执行必要的部分。 你还可以使用一种称为binfmt_misc (https://docs.kernel.org/admin-guide/binfmt-misc.html)的 Linux 机制来教导内核:任何时候遇到匹配该二进制模式的可执行文件时,都使用该解释器来执行它。Farid 在这里使用了 NixOS,但如果没有 NixOS,注册过程大概看起来像这样: `` printf '%s\n' ':self:M:68:SELF::/usr/local/bin/self-exec:' \ > /proc/sys/fs/binfmt_misc/register ``

相似文章

可执行文件是SQLite数据库

Hacker News Top

文章探讨了用SQLite替换ELF可执行文件格式,介绍了一个名为SELF的原型,使得可执行文件可以成为SQLite数据库,并讨论了其益处和技术影响。

可查询的可执行文件

Hacker News Top

本文介绍了将可执行文件视为SQLite数据库的概念,并展示了一个概念验证的web服务器,该服务器将其程序、路由和状态存储在单个文件中。

用细齿梳检查 SQLite

Lobsters Hottest

John Regehr 描述了使用 tis-interpreter 在 SQLite 中搜索未定义行为,发现了其他工具遗漏的错误,如悬空指针使用和未初始化读取。

迷你可执行文件再探

Hacker News Top

本文重新审视了在 Linux 上创建极小 ELF 可执行文件的技术,探讨如何通过滥用头部字段和重叠结构将大小缩减至 45 字节,同时保持与 ELF 规范的兼容性。

SQLite 查询解释器

Simon Willison's Blog

一个基于浏览器的工具,可对 SQLite 运行 SQL 查询,并以通俗易懂的英文解释查询计划和字节码输出。