桃子桃子快讯
←返回首页
工具

Prompt2ELF:让 LLM 跳过编译器直接生成 ELF 可执行文件

开源项目 Prompt2ELF 让 AI 编码智能体直接输出 Linux x86-64 机器码,最小可生成 167 字节…

2026.09.26 · 周六约 4 分钟阅读

GitHub 上的开源项目 Prompt2ELF 尝试了一种非常规的编程路径:让大语言模型驱动的编码智能体直接写出 Linux x86-64 的 ELF 可执行文件,过程中不使用任何编译器、汇编器或链接器。项目作者将这一思路打包成一套「Agent Skill」,可被 Claude Code、GitHub Copilot、Devin、OpenCode 等主流 AI 编码助手加载调用。

项目能做什么

Prompt2ELF 的核心是一条 /prompt2elf forge "..." 指令。智能体收到任务后,会按预设的 ELF 布局和指令编码规则,把最终的可执行文件内容写成纯十六进制文本,再由项目自带的一个 334 字节的「hexwriter.bin」工具把十六进制文本解码为真正的可执行二进制。

项目附带了几组代表性产物:

  • hello.bin:167 字节,运行后输出 Hello, world! 并退出。
  • mandelbrot.bin:322 字节,在终端渲染一个 64×32 的 ASCII Mandelbrot 图形。
  • server.bin:449 字节,启动后在 0.0.0.0:9000 上提供 Hello, world! 的 HTTP 服务。

所有可执行文件在 hex/ 目录下都有对应的「源码」,但这里的「源码」不是 C 或汇编,而是可以直接喂给 hexwriter 的十六进制文本。

工作原理

整个流程可以概括为四步:

  1. 智能体读取项目根目录下的 SKILL.md,获取目标 ABI、编码流程和安全约束。
  2. 根据任务自行设计 ELF 文件头布局、段结构和指令序列,把完整可执行文件写成十六进制文本。
  3. 用 hexwriter.bin 将十六进制文本解码为字节、写入文件,并标记可执行权限。
  4. 对重建后的二进制做逐字节比对,并在本地以原生 Linux 进程形式测试运行。

作者特别指出,hexwriter.bin 还可以「自我复制」——用自己的十六进制源重新生成一份自身,再与原文件用 cmp -s 比对,以此验证重建流程的正确性。

与 AI 编码助手的集成方式

Prompt2ELF 以标准 Agent Skills 包的形式发布,使用方式是把整个仓库复制到对应编码智能体识别的技能目录下,例如:

  • Claude Code:.claude/skills/prompt2elf/
  • Devin / OpenCode:.agents/skills/prompt2elf/
  • GitHub Copilot:.github/skills/prompt2elf/

加载完成后,既可以直接用 /prompt2elf forge "任务描述" 触发,也可以用自然语言让智能体调用,例如「用 Prompt2ELF 做一个仅监听 loopback 的 HTTP 状态服务器」。需要注意的是,forge 是该技能内部定义的动作,与 Foundry 等同名外部命令无关。

局限与定位

Prompt2ELF 并非要取代日常开发中的编译器。作者明确给出了几项边界条件:

  • 目前仅支持 Linux x86-64 平台。
  • 指令偏移和 ELF 尺寸必须严格精确,微小改动往往需要重新计算多处。
  • 示例程序优先追求体积小和逻辑清晰,缺乏生产级的错误处理。
  • 生成的原生代码应尽量在最小权限下运行和检查。

作者强调,对于普通的应用开发,仍然应该使用编译器;Prompt2ELF 的定位是帮助理解可执行文件内部结构、构造极小的自包含程序,以及探索「人类意图—机器码」之间的直接接口。项目未来的方向,是做一个类似 BusyBox 的小型 multicall 二进制,仍然由提示词直接生成,依赖 Linux 系统调用即可运行。

信源