我正在使用js-sctypes从Firefox连接到Linux中的共享库。 我按照以下方式从库中声明了一个函数:
var read_memory = libc.declare("read_memory", ctypes.default_abi, ctypes.int,
ctypes.uint32_t, ctypes.char.ptr, ctypes.int, ctypes.int);
在C ++库中,此函数声明如下:
read_memory(unsigned int address, char *buf, int unit_size, int unit_count)
我通过以下方式调用read_memory
函数:
var my = new ctypes.char().address();
read_memory(0, my, 4, 1);
st = st + my.readString();
它工作正常,但当我调用更大unit_size
和unit_count
的函数时,例如read_memory(0, my, 4, 10)
,Firefox就会崩溃。
是因为ctypes.char
的大小有限,还是因为这个错误还有其他原因?
任何有关此事的帮助将不胜感激。
谢谢。
答案 0 :(得分:3)
我有同样的问题,问题是因为字符编码。在我的问题中,我需要将它们从windows-1250转换为utf-8。
我使用下面的代码:
result = myFunctionToInvoke();
var util = priv.Load("LibToConvert.dll");
var wi12502utf8 = util.declare("win12502utf8", ctypes.default_abi, ctypes.char.ptr, ctypes.char.ptr);
var val = wi12502utf8(result);
result = val.readString();
在这段代码中,我用C ++创建了自己的lib(LibToConvert.dll)来转换字符。