Skip to main content

Crate jscd

Crate jscd 

Source
Expand description

jscd — 把 bytenode 编译的 .jsc(V8 code cache)静态逆向回 JS。

模块分层:

  • tables codegen 生成的多版本配置(基线 + 每版本差异,JSON 内嵌)
  • header 28 字节 SerializedCodeData 头 + Brotli 嗅探
  • vhash Version::Hash() 还原(MurmurHash 变体)与爆破
  • serializer payload 反序列化(SFI 树/常量池/字节码)
  • bytecode/disasm 表驱动字节码解码与 View8 兼容输出
  • out 终端输出(断管不 panic)

Modules§

args
命令行定义:两种入场形态(对齐 ddc 的用法)。
bytecode
字节码解码:表驱动(opcode 表 + 操作数宽度/缩放 + 寄存器命名)。
cli
子命令实现与统一输出(stdout=数据,stderr=诊断,退出码由 main 收口)。
decompile
反编译器:字节码 → 伪 JS(语法合法,尽量可运行)。
disasm
反汇编渲染:对齐 V8 --print-bytecode / View8 反汇编器文本格式。
header
.jsc 头部:SerializedCodeData(布局随 V8 版本可配)+ Brotli 嗅探。
help
双语 help / version 文本(手写,不用 clap 生成的英文骨架)。
lang
命令行信息的双语支持(对齐 ddc 的做法,另加 OS 级回退)。
opt
产物文本的保守优化:把字节码的“寄存器搬运“还原成人读的样子。
opt_js
AST 级优化:用 cure 的 TS/JS 后端做语义保持的 简化与格式化(替代原来的 swc 压缩器)。
out
终端输出的小工具:断管(EPIPE)不算错误,也不能崩。
ro_embed
serializer
payload 反序列化器:把 V8 通用快照流解析为对象树(格式详见 docs/stream-format.md)。
tables
codegen 生成的多版本配置:基线 + 每版本差异,JSON 编译期内嵌(对齐 dae 的 profiles 模式)。
vhash
Version::Hash() 还原与爆破。

Macros§

bi
bi!("english", "中文") → 取其中一个字面量。
bif
bif!("{} files", "{} 个文件"; n) → 对选中的字面量做 format!。 两种语言的格式串共用同一组实参;语序不同就用 {0}/{1} 定位。