#递归 #反汇编器 #Capstone #x86 #反汇编

recursive_disassembler

基于 Capstone 的简单递归反汇编器

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