3个版本 (稳定)
| 1.2.0 | 2021年1月23日 | 
|---|---|
| 1.1.1 | 2020年12月31日 | 
| 0.1.1 | 2020年8月13日 | 
| 0.1.0 |  | 
#1710 in 解析器实现
每月54次下载
18KB
295 行
patternscan
根据给定的模式搜索连续的字节序列。模式可以包含支持的通配符字符,如下所示。
通配符
- ?匹配任何字节
示例模式
- fe 00 68 98- 仅匹配- fe 00 68 98
- 8d 11 ? ? 8f- 可能匹配- 8d 11 9e ef 8f或- 8d 11 0 0 8f等
文档
许可证
此项目采用MIT许可证 - 请参阅LICENSE.md以获取详细信息。
lib.rs:
根据给定的模式搜索连续的字节序列。模式可以包含支持的通配符字符,如下所示。
通配符
- ?匹配任何字节
示例模式
- fe 00 68 98- 仅匹配- fe 00 68 98
- 8d 11 ? ? 8f- 可能匹配- 8d 11 9e ef 8f或- 8d 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();
有关此模块的更多示例用法,请参阅测试