《ObCreateObject 函数分析报告》.pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《ObCreateObject 函数分析报告》.pdf

ObCreateObject 函数分析报告函数分析报告 函数分析报告函数分析报告 ObCreateObject 它的作用是创建指定类型(OBJECT_TYPE) 的对象示例。 堆是系统数据动态申请及释放的地方,WinNT 把堆叫做pool 。根据是否可以换出, 分为PagedPool 和NonPagedPool 。 如果系统频繁的申请和释放内存,开销很大.于是WinNT 利用 LookasideList 做缓 冲, 内存释放时并不是直接到pool,而是放到 LookasideList 中,等申请内存时,先检查表 中是否有合适大小的快,若有就直接使用.系统定时检查表项的数目, 以保持 pool 有足 够的可用内存。 可以将Lookaside 对象想像成一个内存容器。在初始的时候,它先向Windows 申 请了一块比较大的内存。以后程序员每次申请内存的时候,不是直接向 Windows 申 请内存,而是向Lookaside 对象申请内存。Lookaside 对象会智能地避免产生内存“空 洞”。如果Lookaside 对象内部的内存不够用时,它会向操作系统申请更多的内存。当 Lookaside 对象内部有大量的末使用的内存时,它会自动让Windows 回收一部分内存。 总之,Lookaside 是一个自动的内存分配容器,通过对Lookaside 对象申请内存,效率 要高于直接向Windows 申请内存。 看实现代码之前我先大概的描述一下这个函数的工作流程吧! ObCreateObject 内部通过调用 ObpAllocateObject 为对象申请空间。在调用 ObpAllocateObject 调用之前 ObCreateObject 函数做一些相关信息的收集以及判断, ObpAllocateObject 函数返回通过参数返回其起始地址(即Header-Body),同时函数 里面还做一些对象本身的初始化工作,申请成功后,如果要求对象成为“永久对象”, 即具有OB_FLAG_PERMANENT_OBJECT 标志的话,再检查是否为系统的安全机制 所允许,如果不允话的话,还要把刚刚申请的空间释放掉,同时返回一个错误代码 STATUS_PRIVILEGE_NOT_HELD。 第 1 页 (共 26 页) ObCreateObject 函数分析报告函数分析报告 函数分析报告函数分析报告 整个函数就是完成一个目标对象的创建工作。 下面先来看ObCreateObject 函数 这个函数有9 个参数,但是有一个没有使用,所以IDA 里面没有标识出来。参数 如下: ProbeMode = byte ptr 8 ObjectType = dword ptr 0Ch ObjectAttributes= dword ptr 10h ObjectHeader = byte ptr 14h ObjectBodySize = dword ptr 1Ch PagedPoolCharge = dword ptr 20h NonPagedPoolCharge= dword ptr 24h arg_Object = dword ptr 28h 可能有些人在想,你是如何知道他有几个参数的,第一,看参数调用之前压了多 少个参数,然后看里面都用了哪些,还有注意看下有没有通过寄存器传参,最后再看 函数结束的堆栈平衡了多少个参数。 凡是创建对像的系统调用,都要提供至少二个输入参数。其中这定是 DesiredAccess ,说明所创建对象的访问模式,例如只读等。另一个是ObjectAttributes, 这是一个OBJECT_ATTRIBUTES 结构指针,OBJECT_ATTRIBUTES 是一个很重要的 数据结构。 0:000 dt _OBJECT_ATTRIBUTES ntdll!_OBJECT_ATTRIBUTES +0x

文档评论(0)

taxe + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档