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