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
,但这会崩溃
所以我想我必须做一些像上面的linevar 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的人不知道这是什么:(