WebAssembly:从头开始重建堆栈

时间:2018-07-11 18:00:27

标签: stack webassembly call-flow

通过转换.wasm源文件或使用Javascript与合适的调试器进行交互,应该可以序列化完整的Wasm执行状态(主要是堆栈,调用框架,局部变量等)。

我想知道是否有可能使用此序列化表示来重建它,并继续运行在另一台计算机上停止的程序。

当前的浏览器运行时可以支持吗?

1 个答案:

答案 0 :(得分:1)

不确定要使用哪种转换或调试器,但前提是可以序列化JavaScript执行状态的前提是错误的。实际上,在浏览器引擎中很难实现这样的机制。在一般情况下,我所知没有生产JS引擎甚至可以序列化其堆(即使有些,例如V8,对于启动堆来说快照机制非常有限)。更不用说调用堆栈和活动函数状态了,它可能处于许多优化模式之一,可以从运行时或嵌入程序中任意地与C或程序集堆栈帧混合,并且通常非常棘手。

您要考虑的机械化将需要在一流的无界延续基础上进行常规序列化。 JavaScript委员会TC39放弃了很多年前在语言中添加完整的延续性的想法,因为它被认为很难在大多数引擎中实现,而且成本太高(这就是为什么ES6引入生成器作为一种更为有限的机制)的原因。 。编辑:通用序列化甚至从未考虑过,因为它实际上会通过闭包或代理来破坏封装,从而破坏该语言的所有现有安全模式。

相关问题