3 个版本 (破坏性更新)

使用旧的 Rust 2015

0.3.0 2018年5月26日
0.2.0 2017年5月1日
0.1.1 2016年7月1日

#1372解析器实现

Download history 24/week @ 2024-03-24 53/week @ 2024-03-31 18/week @ 2024-04-07 41/week @ 2024-04-14 32/week @ 2024-04-21 33/week @ 2024-04-28 22/week @ 2024-05-05 34/week @ 2024-05-12 27/week @ 2024-05-19 34/week @ 2024-05-26 36/week @ 2024-06-02 26/week @ 2024-06-09 41/week @ 2024-06-16 34/week @ 2024-06-23 11/week @ 2024-06-30 11/week @ 2024-07-07

98 每月下载量
2 crate 中使用

MIT 许可证

44KB
748

长度反汇编器

MIT License crates.io docs.rs Build status Build Status

给定一个字节切片,提取其中操作码的长度。

支持 x86x86_64

此库可在 crates.io 上找到,其文档在 docs.rs

在您的 Cargo.toml 中添加

[dependencies]
lde = "0.3"

示例

获取字节切片中第一个操作码的长度

let result = lde::X64.ld(b"\x40\x55\x48\x83\xEC\xFC\x00\x80");
assert_eq!(result, 2);

遍历字节切片中包含的操作码,返回操作码及其虚拟地址

let code = b"\x40\x55\x48\x83\xEC*\x00\x80";

for (opcode, va) in lde::X64.iter(code, 0x1000) {
	println!("{:x}: {}", va, opcode);
}

// 1000: 4055
// 1002: 4883EC2A

找到至少5字节后的操作码边界

// 1000: 56         push esi
// 1001: 33f6       xor esi,esi
// 1003: 57         push edi
// 1004: bfa0104000 mov edi,0x4010a0
// 1009: 85d2       test edx,edx
// 100b: 7410       je loc_0000001d
// 100d: 8bf2       mov esi,edx
// 100f: 8bfa       mov edi,edx

const INPUT_CODE: &[u8] = b"\x56\x33\xF6\x57\xBF\xA0\x10\x40\x00\x85\xD2\x74\x10\x8B\xF2\x8B\xFA";

// We'd like to overwrite the first 5 bytes with a jmp hook
// Find how many opcodes need to be copied for our hook to work

let mut count = 0;
for (opcode, _) in lde::X86.iter(INPUT_CODE, 0x1000) {
	count += opcode.len();
	if count >= 5 {
		break;
	}
}

// The answer is the first 4 opcodes, or 9 bytes

assert_eq!(count, 9);

自定义 DisplayDebug 格式化,包括带有替代标志的格式化打印支持

let iter = lde::X64.iter(b"\x40\x55\x48\x83\xEC*\x00\x80", 0);

assert_eq!(format!("{:?}", iter), "[4055] [4883EC2A] 0080");
assert_eq!(format!("{:#?}", iter), "[40 55] [48 83 EC 2A] 00 80");
assert_eq!(format!("{:}", iter), "4055\n4883EC2A\n");
assert_eq!(format!("{:#}", iter), "40 55\n48 83 EC 2A\n");

许可证

根据 MIT 许可证 许可,请参阅 license.txt

贡献

除非您明确说明,否则您提交的任何贡献,只要有意将其包含在工作内容中,都应按上述方式许可,无需附加条款或条件。

无运行时依赖