跳转到内容
主站 新闻 控制台

Your executable is a SQLite database

· Simon Willison
技巧LLM

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

Farid Zakaria 介绍了一种巧妙的 Linux 模式,用于创建一个可以直接用作可执行二进制文件的 SQLite 数据库文件。

该技巧将 SQLite 文件格式中偏移量为 68 字节处的 4 字节应用程序 ID(application ID)设置为 SELF,代表“结构化可执行与可链接格式”(Structured Executable & Linkable Format)。然后,使用此模式(schema)将 ELF 可执行格式的各个组件排列到多个不同的 SQLite 表中。

他们的 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