WebAssemblyバイナリをパースするRustのcrate
bytecodealliance/wasm-tools:crates/wasmparser
exampleによると、wasmparser::Parser::new(offset).parse_all(&buffer) という形で使うらしい
wasm-tools v1.245.1 時点でのコードを読んでいく
- parser.rs#L1086に
parse_all()があり、cur.parse()を繰り返し呼んでイテレータを生成しているcurは初めにcur = selfとしているparse()が返すChunk::Parsed { payload, consumed: usize }のpayloadがPayload::ModuleSectionあるいはPayload::ComponentSectionだった場合、curにpayload.parserを代入している- module と component とで別々のパーサーを使っている?(それはそうかも)
- ここで module はふつうのやつ、componentはWebAssembly Component Modelで定義されたやつ
- もうちょい詳しく書くべき?あるいはページを生やす
- Parser::parse():
BinaryReaderを作って、それをself.parse_reader()に渡して呼ぶ - [Parser::parse_reader()]:デカい
- (todo)