1

我已经设法让 BoehmGC 通过强制“侧栈”上的所有根来处理 webassembly。除了有很多终结器的情况外,这一切都很好。如果我没有终结器,这一切都可以工作,无论我分配了多少对象。一旦我设置了终结器,它就会失败,因为对象已损坏。终结器似乎在一个无效对象上被调用(0 处的值是无效的,或者它从一开始就没有被分配)。

现在我意识到这听起来有点模糊,但这对任何人来说都是一个警钟吗?

__GC_Finalizer 
GC_notify_or_invoke_finalizers 
GC_generic_malloc 
GC_malloc 

它总是在这个调用堆栈上失败。

__GC_Finalizer 被成功调用了无数次,并且只调用了一个 vmt 方法。伪代码如下:

(*(FnPtrWithThis**)obj))[8](obj)

它已经失败了,其中 obj 没有指向有效的 vmt(所有这些在数据段中都是常量,但它指向的 vmt 不是真正的 vmt 地址)。

如果有人有一些我可以查看的信息,比如关于终结器如何在内部工作的文档,或者我可以调试的地方,真的任何提示都会受到赞赏。

4

0 回答 0