#tree-sitter #reverse-engineering #parser

tree-sitter-sleigh

Ghidra SLEIGH 语言的 Tree-sitter 解析器

1 个不稳定版本

0.1.0 2024年7月22日

#433数据结构

Download history 113/week @ 2024-07-21 4/week @ 2024-07-28

117 每月下载量

Apache-2.0LGPL-3.0-only

150KB
3.5K SLoC

tree-sitter-sleigh

为 Ghidra SLEIGH 语言编写的 Tree sitter 解析器(了解更多 这里)。

这是一个原始解析器,除了准确地将 SLA 语言解析为可用的机器结构外,不进行任何语义解释。该项目背后的意图是构建一个 SLA 到 Rust 转译器的前端。

示例

let language_path = std::path::PathBuf::from("../Processors/x86/data/languages/x86-64.sla");
let language_contents = std::fs::read_to_string(&language_path)?;
let parsed = tree_sitter_sleigh::parse(&language_contents)?;
println!("{:?}", parsed);

这可能需要几分钟(解析器速度并不快,这些文件相当大,这也是为什么这个项目不适合反复加载 SLA 规范的原因)。你最终会得到一些类似

Sleigh {
    _open: (),
    version: Some(
        3,
    ),
    bigendian: false,
    align: 1,
    uniqbase: 1097856,
    maxdelay: None,
    uniqmask: None,
    numsections: None,
    _close: (),
    sourcefiles: SourceFiles {
        _start: (),
        source_files: [
            SourceFile {
                _start: (),
                name: "ia.sinc",
                index: 0,
                _end: (),
            },
            SourceFile {
                _start: (),
                name: "lockable.sinc",
                index: 1,
                _end: (),
            },

...等等。

依赖关系

~11MB
~214K SLoC