lief-patchelf:跨平台 ELF 编辑器,用于解释器和依赖关系修复
修改 ELF 解释器路径,添加或删除 DT_NEEDED 条目,并从 Windows 或 Linux 主机编辑 RPATH 或 SONAME 值。该工具由 Romain Thomas 创建,作为 LIEF 项目的一部分,重新实现了经典的 NixOS patchelf CLI,使用 LIEF 的面向段的重写引擎。它支持 shell 自动完成和手册页,适合需要精确、跨主机二进制编辑以实现兼容性或分析的安全研究人员、打包者和 DevOps 工程师。
工具实际上在 ELF 二进制文件中更改了什么
该工具编辑具体的 ELF 字段:动态链接器(解释器)路径、DT_NEEDED 依赖项条目、RPATH 和 RUNPATH 字符串,以及库的 SONAME。它还可以通过删除不包含引用库的目录来缩小 RPATH。那些操作从命令行运行,并保持与原始 patchelf 接口的兼容性,因此调用经典 CLI 的脚本可以在不改变其调用方式的情况下接受该工具。
重写过程在混合文件系统上的可靠性如何
该工具使用来自 LIEF 库的基于段的重写引擎,而不是基于节的方法,这减少了当二进制文件具有非标准或优化的段布局时的布局损坏。用 Rust 编写提供了在二进制重写期间的内存安全优势。针对 Windows、Linux 和 macOS 的跨平台构建让您可以在与目标运行时不同的主机上修补 ELF 文件,这在您无法运行本地 Linux 环境时非常有用。
安全性、系统影响和工作流程要求
该工具是一个独立的 CLI,直接在 ELF 文件上操作;它不尝试进行在线系统更改。因为它保持与原始实用程序的命令行一致性,自动化管道可以以与脚本相同的方式调用它。该发行版提供预编译的二进制文件或通过 Rust 工具链的源代码构建,因此用户只需基本的命令行经验,只有在选择从源代码编译时才需要 Rust 工具链。
技术用户的实用建议
该工具是一个精确的选项,适合必须从非Linux主机编辑ELF元数据的工程师;它适合已经依赖于patchelf CLI的工作流程。在部署之前,建议对二进制文件的副本进行测试更改,并在适当的运行时或模拟器中运行修补后的可执行文件。推荐。