Simon Willison · 博客

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

Your executable is a SQLite database

二〇二六年八月二十四日 · 英文原文

Farid Zakaria描述了一种Linux模式,将SQLite数据库文件直接作为可执行二进制文件使用。其方法是将SQLite文件格式偏移68字节处的4字节应用ID设为`SELF`(Structured Executable & Linkable Format),并将ELF可执行格式组件安排到多个SQLite表中。通过self-exec解释器(C代码)提取并执行必要部分,并利用`binfmt_misc`机制让内核匹配该二进制模式。Farid使用NixOS,注册过程示例为`printf '%s\n' ':self:M:68:SELF::/usr/local/bin/self-exec:' > /proc/sys/fs/binfmt_misc/register`。内容源自Hacker News,标签:c, linux, sqlite。

你的可执行文件是一个SQLite数据库。Farid Zakaria描述了一种巧妙的Linux模式,用于创建一个可直接作为可执行二进制文件使用的SQLite数据库文件。其技巧是将SQLite文件格式的4字节应用ID(文件偏移68字节处)设置为SELF,代表Structured Executable & Linkable Format(结构化可执行与链接格式)。ELF可执行格式的各个组件随后被安排到多个不同的SQLite表中,使用此schema。他们的self-exec解释器(C代码在此)随后可以提取并执行必要的部分。你还可以使用一种名为binfmt_misc的Linux机制,让内核在遇到匹配该二进制模式的任何可执行文件时执行它。Farid在此使用NixOS,但如果没有NixOS,我认为注册过程大致如下:

printf '%s\n' ':self:M:68:SELF::/usr/local/bin/self-exec:' \
  > /proc/sys/fs/binfmt_misc/register

来自Hacker News。标签:c, linux, sqlite

译自 Simon Willison · 博客 · 录于 二〇二六年八月二十四日