网站大量收购独家精品文档,联系QQ:2885784924

(CreateProcess执行过程精简.docVIP

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

创建进程的过程分成六个阶段,发生于操作系统的三个部分中 三个部分是: Windows客户端即某个应用进程的包括Kernel32.dll在内的动态连接库 Windows的“执行体”、即内核(确切地说是内核的上层) 以及Windows子系统的服务进程Csrss中。 六个阶段是: 1. 打开目标映像文件。 2. 创建Windows的“执行体进程对象”,也就是内核中的“进程控制块”数据结构。 3. 创建该进程的初始(第一个)线程,包括其堆栈、上下文、以及“执行体线程对象”,即内核中的“线程控制块”数据结构。 4. 将新建进程通知Windows子系统。 5. 启动初始线程地运行(除非因为参数中的CREATE_SUSPENDED标志位为1而一创建便被挂起)。 6. 在新进程和线程的上下文中完成用户空间的初始化,包括装入所需的DLL,然后开始目标程序的运行。 BOOL WINAPI CreateProcess( __in LPCTSTR lpApplicationName, __in_out LPTSTR lpCommandLine, __in LPSECURITY_ATTRIBUTES lpProcessAttributes, __in LPSECURITY_ATTRIBUTES lpThreadAttributes, __in BOOL bInheritHandles, __in DWORD dwCreationFlags, __in LPVOID lpEnvironment, __in LPCTSTR lpCurrentDirectory, __in LPSTARTUPINFO lpStartupInfo, __out LPPROCESS_INFORMATION lpProcessInformation ); 在打开可执行映像之前执行一下步骤:看书上。 第一阶段:打开目标映像文件 在Win32位API中,创建进程是由CreateProcess()完成的。这实际上是个宏定义,根据不同的情况定义成CreateProcessA ()或CreateProcessW()之一,这两个函数都在kernel32.dll中(可以用工具depends观察)。两个函数的区别仅在于字符串的表达,前者采用ASCII字符,而后者采用“宽字符”、即Unicode。实际上Windows的内部都采用宽字符,所以前者只是把字符串转换成宽字符格式,然后调用后者。 可以在Windows上运行的可执行软件有好几类,处理的方法自然就不一样: ● Windows的32位.exe映像,直接运行。 ● Windows的16位.exe映像,启动ntvdm.exe,以原有命令行作为参数。 ● DOS的.exe、.com、或.pif映像,启动ntvdm.exe,以原有命令行作为参数。 ● DOS的.bat或.cmd批命令文件(脚本),启动cmd.exe,以原有命令行作为参数。 ● POSIX可执行映像,启动posix.exe,以原有命令行作为参数。 ● OS/2可执行映像,启动os2.exe,以原有命令行作为参数。 这里面最重要的当然是32位的.exe映像,而最后两类现在已经很少见了。从对于除32位.exe以外的各种映像的处理,读者不妨对比一下Wine对.exe映像的处理,看看这里有着什么样的相似性。 对于32位.exe映像,CreateProcess()首先打开映像文件,再为其(分配)创建一个 “Section”、即内存区间。 创建内存区间的目的当然是要把映像文件影射到这个区间,不过此时还不忙着映射,还要看看。 看什么呢?首先是看已经打开的目标文件是否一个合格的.exe映像(万一是DLL映像?)。还要看的事就有点出乎读者意外了,看的是在“注册表”中的这个路径: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options 用depends可以看到,ntdll.dll中有个函数LdrQueryImageFileExecutionOptions(),就是专门干这个事的。 如果上述路径下有以目标映像文件的文件名和扩展名为“键”的表项,例如“image.exe”,而表项中又有名为“Debugger”的值,那么这个值 (一个字符串)

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档