go版本wasm解析器分析
解析部分
f, err := os.Open(flag.Arg(0))m, err := wasm.ReadModule(f, importer)func ReadModule(r io.Reader, resolvePath ResolveFunc) (*Module, error) {
magic, err := readU32(reader)
if err != nil {
return nil, err
}
if magic != Magic {
return nil, ErrInvalidMagic
}
if m.Version, err = readU32(reader); err != nil {
return nil, err
}
for {
done, err := m.readSection(reader)
if err != nil {
return nil, err
} else if done {
break
}
}
m.LinearMemoryIndexSpace = make([][]byte, 1)
if m.Table != nil {
m.TableIndexSpace = make([][]uint32, int(len(m.Table.Entries)))
}
if m.Import != nil && resolvePath != nil {
err := m.resolveImports(resolvePath)
if err != nil {
return nil, err
}
}执行部分
引用导入测试
最后更新于