1个不稳定版本

0.1.0 2023年11月18日

#306 in 构建工具

Download history 1/week @ 2024-04-07 32/week @ 2024-04-21 3/week @ 2024-04-28 29/week @ 2024-05-19 1/week @ 2024-05-26 13/week @ 2024-07-14 130/week @ 2024-07-21

143 每月下载量
2 crates 中使用

BSD-2-Clause

115KB
2K SLoC

editpe

Crates.io Docs.rs Tests & Checks

可移植可执行文件资源编辑器。

支持跨平台解析和修改Windows可执行文件及其资源。

功能

  • 解析和内省可移植可执行文件
  • 资源编辑和图标替换
  • 资源在文件之间传输

与其他资源编辑器(如rcedit)相比,editpe非常注重保持修改后的可执行文件处于有效状态。它通过解析和重建完整的资源目录以及所有文件和段头,保持现有段完整,并将任何附加数据留在文件末尾。

请注意,打包的可执行文件(如用UPX打包的)可能不以修改后的资源表开头,并且可能包含无法读取的压缩资源。如果您需要具有修改后的资源的打包可执行文件,请先编辑资源,然后进行打包。

用法

请参阅测试以获取更多用法示例。

示例:图标替换

use editpe::Image;

let data = std::fs::read(BINARY_PATH)?;
let icon = std::fs::read(ICON_PATH)?;

// parse the executable image
let mut image = Image::parse(&data)?;

// get the resource directory
let mut resources = image.resource_directory().cloned().unwrap_or_default();

// set the icon in the resource directory
resources.set_icon(&image)?;

// set the resource directory in the image
image.set_resource_directory(resources)?;

// build an executable image with all changes applied
let target = image.data();

示例:资源传输

use editpe::Image;

let source = std::fs::read(SOURCE_PATH)?;
let target = std::fs::read(TARGET_PATH)?;

// parse the source executable image
let image = Image::parse(&source)?;

// get the source resource directory
let resources = image.resource_directory()?;

// parse the target executable image
let mut image = Image::parse(&target)?;

// set the resource directory in the target image
image.set_resource_directory(resources)?;

// build an executable image with all changes applied
let target = image.data();

依赖关系

~7MB
~98K SLoC