Ctypes mozilla 未知错误

Ctypes mozilla unknown error

在 mozille 扩展中 运行:

SecSess.Logger.info("ctypes test");
Components.utils.import("resource://gre/modules/ctypes.jsm");
SecSess.Logger.info("1");
this.lib = ctypes.open("libcrypto.so");
SecSess.Logger.info("2");
var a = new Uint8Array(1<<10);  
SecSess.Logger.info("3");
var ptr = new ctypes.uint8_t.ptr(a.buffer);
SecSess.Logger.info("4");

您可能会问,为什么在每一步之后都进行这种丑陋的记录?好吧,这段代码失败了,没有向我显示错误。 (或者至少我找不到错误信息)

这是打印出来的:

ctypes test
1
2
3

因此永远不会打印第 5 条日志消息,这意味着以下语句永远不会完成:

var ptr = new ctypes.uint8_t.ptr(a.buffer);

这是我必须使用的一些旧代码的简化版本,我在网上也发现它是有效的。但是它不起作用。此附加组件不是使用带有 jpm 的新 SDK 开发的。坦率地说,我不知道它是如何以及何时开发的,但我需要 运行 对其进行一些测试。它带有一些在组件和模块目录中排序的源文件,以及根目录中的 chrome.manifest 和 install.rdf。我将这些文件复制到 Mozilla 的扩展目录中以使其工作。扩展执行但 ctypes 似乎有问题。不再完全支持 ctypes 还是这些旧式附加组件不再对现代 Firefox 有效?

此致,

罗尔

我认为他们发布了一个补丁来禁止从缓冲区创建指针。我会仔细检查。

编辑: Ah per this: https://developer.mozilla.org/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/Working_with_ArrayBuffers,你不必用 ctypes.uint8_t.ptr 包裹它,只需将它像 a.buffer 一样传递到你需要它的任何地方。 :)