Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firefox addon 从缓冲区中的数组元素读取句柄信息_Firefox Addon_Ctypes_Jsctypes - Fatal编程技术网

Firefox addon 从缓冲区中的数组元素读取句柄信息

Firefox addon 从缓冲区中的数组元素读取句柄信息,firefox-addon,ctypes,jsctypes,Firefox Addon,Ctypes,Jsctypes,我正在获取句柄,结构如下所示: var SYSTEM_HANDLE_TABLE_ENTRY_INFO = new ctypes.StructType('SYSTEM_HANDLE_TABLE_ENTRY_INFO', [ {'UniqueProcessId': ctypes.unsigned_long}, {'CreatorBackTraceIndex': ctypes.unsigned_long}, {'ObjectTypeIndex': ctypes.unsigned

我正在获取句柄,结构如下所示:

var SYSTEM_HANDLE_TABLE_ENTRY_INFO = new ctypes.StructType('SYSTEM_HANDLE_TABLE_ENTRY_INFO', [
    {'UniqueProcessId': ctypes.unsigned_long},
    {'CreatorBackTraceIndex': ctypes.unsigned_long},
    {'ObjectTypeIndex': ctypes.unsigned_long},
    {'HandleAttributes': ctypes.unsigned_long},
    {'HandleValue': ctypes.unsigned_long},
    {'Object': ctypes.unsigned_long},
    {'GrantedAccess': ctypes.unsigned_long}
]);


var SYSTEM_HANDLE_INFORMATION = new ctypes.StructType('SYSTEM_HANDLE_INFORMATION', [
    {'NumberOfHandles': ctypes.unsigned_long},
    {'Handles': ctypes.ArrayType(SYSTEM_HANDLE_TABLE_ENTRY_INFO, 5)}
]);
因此,现在我成功地获取了
系统处理信息
这不是问题,我这样做:

var proc = ctypes.cast(buffer.addressOfElement(0), SYSTEM_HANDLE_INFORMATION.ptr).contents;
var procHandleAtIndex = ctypes.cast(buffer.addressOfElement(i), SYSTEM_HANDLE_TABLE_ENTRY_INFO.ptr).contents;
这将成功地用以下内容填充
proc

{NumberOfHandles: 59000, Handles:array}
数组中的每个元素
都是一个对象,看起来像上面的
系统句柄(SYSTEM)表(TABLE)条目(ENTRY)信息
结构

现在我的问题是:我想访问
array
中每个元素的
UniqueProcessId
,我想这样做
proc.Handles[i].UniqueProcessId
,但这会崩溃

所以我想我必须做一些像上面的line
var proc
这样的事情:

var proc = ctypes.cast(buffer.addressOfElement(0), SYSTEM_HANDLE_INFORMATION.ptr).contents;
var procHandleAtIndex = ctypes.cast(buffer.addressOfElement(i), SYSTEM_HANDLE_TABLE_ENTRY_INFO.ptr).contents;
现在,这避免了崩溃,但它读错了东西。换句话说,我通过给出
I=0
哪个
proc.Handles[0].UniqueProcessId!=procHandleAtIndex.UniqueProcessId
。当我传递
I=0
时,结果是
procHandleAtIndex.UniqueProcessId==proc.NumberOfHandles

请帮助我阅读
缓冲区中
句柄中的元素

谢谢,我不懂任何C语言,我是一个javascript的家伙

参考文献 这是如何在python ctypes中成功实现的:


您的示例代码看起来不是C或C++。相反,它看起来是JavaScript。这对阅读者来说很重要。是的,上面的javascript使用js ctypes。下面是使用PythoncTypes的python。但是读取数组的逻辑是相同的。C语言的人在过去帮助我做一些事情。也许,但在这种情况下,看起来你需要了解JavaScript,特别是js C类型的人的帮助。我对C/C++、Python和Python的ctypes的了解似乎没有任何用处。我建议更新你的帖子,包括和标签。您还应该更新示例,以包含分配缓冲区并调用
NtQuerySystemInformation
的JavaScript代码。换句话说,让你失败的JavaScript例子和你正在工作的Python例子一样完整。好的,谢谢你,在jsctypes领域,只有我和另外两个不知道怎么做的人能帮上忙:(,当然JavaScript的人不知道这是什么:(