5 个版本 (稳定)
使用旧的 Rust 2015
2.1.2 | 2018 年 5 月 10 日 |
---|---|
2.0.0 | 2018 年 5 月 10 日 |
0.1.0 | 2017 年 7 月 21 日 |
在 解析器实现 中排名第 1962
12KB
224 行
递归反汇编器
该包实现了一个基于 Capstone 的非常简单的递归反汇编器。提供一些数据和一组起始偏移量(反汇编根),然后该包生成基本块列表,跟随跳转指令和调用。
用法
只需将 recursive_disassembler="2.*"
添加到您的 cargo.toml
文件中。
extern crate recursive_disassembler;
use recursive_disassembler::{RecursiveDisassembler, BBDisasmCapstoneX86};
fn main() {
let data = vec!(0x66, 0x40, 0x66, 0x50, 0x75, 0xfa, 0x75, 0x06, 0x66, 0x53, 0xeb, 0xfc, 0x0f, 0x04, 0xc3, 0x66, 0x83, 0xc0, 0x01); //see test.asm
let bbdasm = BBDisasmCapstoneX86::new_32();
let base = 0x40000;
let mut disasm = RecursiveDisassembler::new(data, base, bbdasm);
disasm.add_root(0x40000);
disasm.disassemble();
print!("{:#?}", disasm.bbs);
}
结果如下
{
262144: BasicBlock {
addr: 262144,
size: 6,
term: CondJump(
262144
)
},
262150: BasicBlock {
addr: 262150,
size: 2,
term: CondJump(
262158
)
},
262152: BasicBlock {
addr: 262152,
size: 4,
term: Jump(
262152
)
},
262158: BasicBlock {
addr: 262158,
size: 1,
term: Ret(
[]
)
}
}
状态
- 目前仅支持 x86 (32/64)。
- 目前无法解析跳转表和类似结构
- 可能需要先进行线性扫描以找到更多内容
依赖项
~4MB
~83K SLoC