问题
在使用 Electron 21.0.0 及以上版本开发桌面应用程序时,调用 C++ 库时出现错误。报错信息如下:
App threw an error during load
Error: Error in native callback
at process.func [as dlopen] (node:electron/js2c/asar_bundle:2:1822)
原因分析
Electron 团队在 2022 年 6 月 30 日发布了一篇博客文章《Electron 和 V8 内存隔离区》。文中提到:
Electron 21 及更高版本将启用 V8 内存隔离区,这将对一些原生模块产生影响。
Electron 21 及更高版本启用了 V8 内存隔离区(也称 V8 沙箱)。尽管它具有沙箱的标签,但它与 Chromium 的渲染器沙箱完全不同。V8 内存隔离区的目标是:
假设攻击者可以在虚拟地址空间的专用区域(沙箱)内任意读写内存,例如包含所有 V8 堆。这种能力可以从典型的 V8 漏洞中获得。为了保护同一进程中的其他内存免受损坏,并通过扩展防止任意代码的执行,V8 堆中的所有原始指针都是“沙箱化”的,例如通过将它们转换为相对于沙箱底部的偏移量或转换为索引进入外部指针表。
链接:
解决Electron21+版本调用C++库的V8内存隔离区问题

文章探讨了在Electron21.0.0及以上版本中,由于启用V8内存隔离区导致的C++库调用错误。提供了禁用V8隔离区、降级Electron版本和借鉴VSCode的内存分配器shim解决方案。建议开发者根据项目复杂性选择合适的方法。
最低0.47元/天 解锁文章
502

被折叠的 条评论
为什么被折叠?



