3个版本 (稳定)

1.2.0 2021年1月23日
1.1.1 2020年12月31日
0.1.1 2020年8月13日
0.1.0 2020年8月13日

#1710 in 解析器实现

Download history • Rust 包仓库 14/week @ 2024-03-10 • Rust 包仓库 11/week @ 2024-03-17 • Rust 包仓库 7/week @ 2024-03-24 • Rust 包仓库 42/week @ 2024-03-31 • Rust 包仓库 17/week @ 2024-04-07 • Rust 包仓库 8/week @ 2024-04-14 • Rust 包仓库 17/week @ 2024-04-21 • Rust 包仓库 52/week @ 2024-04-28 • Rust 包仓库 6/week @ 2024-05-05 • Rust 包仓库 12/week @ 2024-05-12 • Rust 包仓库 14/week @ 2024-05-19 • Rust 包仓库 21/week @ 2024-05-26 • Rust 包仓库 16/week @ 2024-06-02 • Rust 包仓库 6/week @ 2024-06-09 • Rust 包仓库 13/week @ 2024-06-16 • Rust 包仓库 16/week @ 2024-06-23 • Rust 包仓库

每月54次下载

MIT 许可证

18KB
295

patternscan

CI Badge Crates Badge License Badge Issues Badge

根据给定的模式搜索连续的字节序列。模式可以包含支持的通配符字符,如下所示。

通配符

  • ? 匹配任何字节

示例模式

  • fe 00 68 98 - 仅匹配 fe 00 68 98
  • 8d 11 ? ? 8f - 可能匹配 8d 11 9e ef 8f8d 11 0 0 8f

文档

docs.rs

许可证

此项目采用MIT许可证 - 请参阅LICENSE.md以获取详细信息。


lib.rs:

根据给定的模式搜索连续的字节序列。模式可以包含支持的通配符字符,如下所示。

通配符

  • ? 匹配任何字节

示例模式

  • fe 00 68 98 - 仅匹配 fe 00 68 98
  • 8d 11 ? ? 8f - 可能匹配 8d 11 9e ef 8f8d 11 0 0 8f

示例用法

使用scan函数在Read的输出中搜索模式。使用Cursor在内存中的字节数组中扫描可能如下所示

use patternscan::scan;
use std::io::Cursor;

let bytes = [0x10, 0x20, 0x30, 0x40, 0x50];
let pattern = "20 30 40";
let locs = scan(Cursor::new(bytes), &pattern).unwrap(); // Will equal vec![1], the index of
                                                        // the pattern

任何实现Read的结构都可以作为读取器传递,以便扫描模式的实例,因此可以在可执行文件中扫描字节序列,如下所示

use patternscan::scan;
use std::fs::File;

let reader = File::open("somebinary.exe").unwrap();
let instruction = "A3 ? ? ? ?";
let locs = scan(reader, &instruction).unwrap();

有关此模块的更多示例用法,请参阅测试

无运行时依赖