首页 > 解决方案 > 如何从 WebAssembly 检查 V8 生成的 x86/x64 代码?

问题描述

https://webassembly.studio/允许检查 WebAssembly (WASM) 文件和相应的 SpiderMonkey 生成的 x86 代码。我想同样检查 V8 的 WASM 编译器(Liftoff 和 TurboFan)生成的指令

我对 V8 的代码库/API 完全不熟悉(不过,我编译并链接了它并遵循了一些教程)。似乎有一个v8::CompiledWasmModule可用的类,但它似乎没有公开通过 Liftoff 或 TurboFan 访问生成的 x86/x64 指令。

WebAssembly - 添加新操作码描述了将 WASM 操作码添加到 V8 的过程。上述类中提供了看似适合 WASM 编译/执行的函数。不过,这些似乎在 V8 代码库中分层很深,如果我将 V8 链接为库,将很难访问。另外,我不确定这是否对应于 Liftoff 或 TurboFan。

任何熟悉 V8 代码库的人都可以给我一些关于如何访问 Liftoff 和/或 TurboFan 的 WebAssembly 编译模块以获取 x86/x64 代码的指示吗?

标签: v8webassemblyembedded-v8

解决方案


要检查生成的代码,您可以使用该标志运行d8shell 。--print-wasm-code您将需要一个调试版本或带有v8_enable_disassembler = trueGN 参数的发布版本。

没有现有的方法可以通过 V8 的 API 检索生成的代码;所以如果这就是你想要的,那么你必须添加它。请记住,V8 并非设计为独立编译器,这意味着生成的代码假定它将在“V8 内部”运行,因此如果您想将它用于其他任何事情,则必须进行重大修改。


推荐阅读