v8 - 如何从 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 代码的指示吗?
解决方案
要检查生成的代码,您可以使用该标志运行d8
shell 。--print-wasm-code
您将需要一个调试版本或带有v8_enable_disassembler = true
GN 参数的发布版本。
没有现有的方法可以通过 V8 的 API 检索生成的代码;所以如果这就是你想要的,那么你必须添加它。请记住,V8 并非设计为独立编译器,这意味着生成的代码假定它将在“V8 内部”运行,因此如果您想将它用于其他任何事情,则必须进行重大修改。
推荐阅读
- javascript - 无法将数组条目作为数据参数传递 - 内部服务器错误
- mulesoft - 在 API 中找不到应用程序
- android - Android:如何从本机库中的 Mediastore 访问音频文件 (c++)
- java - 为什么我不能可视化这个 DICOM 文件?
- navbar - 缩小页面大小时不出现 React-bootstrap 汉堡菜单
- android - 使 Room DAO 类实现另一个接口
- swiftui - 如何将数据从子视图传递到父视图到 SwiftUI 中的另一个子视图?
- multithreading - 基于线程组一条件的多线程组执行
- elasticsearch - 为搜索创建具有更高吞吐量的 Elasticsearch 集群
- c++ - 为什么以下代码段存在编译错误?