- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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”的值,那么这个值 (一个字符串)
您可能关注的文档
- [【2013上海浦东新区二模】上海市浦东新区2013届高三下学期二模语文试题.doc
- [【2013河西二模】天津市河西区2013届高三总复习质量检测二历史Word版含答案.doc
- [【2014上海闵行一模】上海市闵行区2014届高三上学期期末考试一模化学试题Word版含解析.doc
- [【2014大连市二模】辽宁省大连市2014届高三第二次模拟考试历史试题Word版含答案.doc
- [【2014泰安市一模】山东省泰安市2014届高三第一轮复习质量检测历史试题Word版含解析by史.doc
- [【2015中考政治常考易错点】专题十二弘扬民族精神.doc
- [【2014潍坊市一模】山东省潍坊市2014届高三3月模拟考试英语试题Word版含解析.doc
- (CB18表.doc
- [【6周年】2011年成人高考大学语文专升本模拟预测试卷3中大网校.doc
- (Cbacxij手机JAVA程序下载安装方法大全.doc
- [【解析版】北京市延庆县20122013学年八年级下期末物理试卷.doc
- [【解析版】广东省华南师大附中2013届高三第三次月考数学试卷文科.doc
- [【解析版】广东省华南师大附中2013届高三第二次月考数学试卷文科.doc
- [【解析版】广东省肇庆市广宁中学20122013学年高三下2月月考数学试卷文科.doc
- [【解析版】江苏省盐城市2013届高三第二次模拟3月考试数学试题.doc
- (CRM营销系统简介.docx
- [【解析版】江西省莲花县城厢中学20122013学年八年级下期末物理试卷.doc
- (crontab命令的用法.doc
- [【解析版】河北省邢台市20122013学年七年级下期末数学试卷.doc
- [【解析版】河北省邢台市七年级下期末数学试卷.doc
文档评论(0)