一个microsoft的.exe程序的启动过程

一个microsoft的.exe程序的启动过程

ID:47285748

大小:47.50 KB

页数:3页

时间:2019-09-02

一个microsoft的.exe程序的启动过程_第1页
一个microsoft的.exe程序的启动过程_第2页
一个microsoft的.exe程序的启动过程_第3页
资源描述:

《一个microsoft的.exe程序的启动过程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、一个microsoft的.exe程序的启动过程学习windows编程从mfc角度来说可分为两部分那就是WinMain函数以前的,和WinMain函数以后的。前者涉及很多windows操作系统内部的知识,后者么看mfc源码就可以了。虽然大多数程序不需要你了解太多关于os加载应用程序这方面的知识,但我认为能较深入了解windowsos的运行悄况对程序员是很有帮助的。最近我正在研究一个microsoft的.exe程序的启动过程,这也是以上所说的关于os如何加载程序的知识,它包括•进程创建,主线程创建,PE文件加载,程序

2、c运行时启动函数以及四种呃in函数的调用等许多令我不得不静下心来好好思索的东东。从nifc编程角度来说,这些都是不得见的,不过了解这些对程序员编制好的windows程序是有好处的。在平时的学习屮屮我有很多疑点,到底在桌面双击一个exe程序,os调用的第一个函数是什么?甚至到现在我研究很长时间后,还是得不到令我满意的答案。不过在学习的过程屮我还是又说收获的,下面和大家一起分享一下,我也把这段时间所学作一下总结。要了解一个.exe程序的启动过程就不得不了解一下有关操作系统方面的知识,suchas“进程,线程,虚拟内存

3、〃的基本的知识。当然这里我就不详细介绍了,有兴趣的同学可以自己去查一查这方面的资料。在未真正开始Z前,先统一一下本文出现的一些名词的含义:App.exe假定为应用mfc的AppWizard做出的一个SD1程序,App是它的名字。你可以把它看为一个标准的"hellomfc!z/程序。PE不要以为它是“体育课”的缩写呦。它可是微软的标准Win32可执行文件.exe和动态链接库.dll的文件格式,它的englishname是PortableExecutableFileFormat<>下面可要正式开始了。一个micros

4、oft的.exe程序的启动方法有很多,这里我们以双击App.exe图标启动为例(其他方法,我想也是一样的)。在补充一下,我所用的os是Windows2000Server,所以这里也主要讨论win2000下的应用程序,过要涉及较多关于NT内核,毕竟微软主推win2000/winxp和Unicode么。一个microsoft的.exe程序的启动过程如下:(1)当我们双击App.exe图标启动程序时,系统首先做什么呢,让我们先听一听侯捷是如何说的吧“执行起来的App进程其实是shell调用CreateProcess激活

5、的”一一〃深入浅出MFCsecondedition"page39载。很多书上都是如是说的,shell又名“命令解释器”,是Win32操作系统基于浏览器的一个32位用户接口,它是一个多线程的好例子,屏幕上每一个文件夹浏览窗口都是它的一个线程。它是操作系统引导时加载的系统进程,它具体表现为windowsexplorer.exeoexplorer,exe是所有用户应用程序的创造者。你完全可以将shell看成是所有应用程序进程的父进程,就像桌而(desktop)可看成所有窗口的父窗口一样。shell的用途很多,如启动应用

6、程序,管理文件系统,将应用程序与相应文件相关联等等。我们常见的桌而上的带有小箭头的快捷方式(shortcut)就是一个shell链接,shell负责管理一个叫〃名字空间〃的类似文件系统似的“超文件系统”,它允许应用程序在任何地方在不知访问对象名字和位置的前提下访问到这个对象,此类对象有:文件,目录,驱动器,打印机以及网络资源。而名字空间就是shell把这些对象有层次组织起来的一个结构。名字空间为用户和应用程序提供了一种可靠和高效的方法来访问和管理对象.好了不论它是什么,凡正它调用了CreateProcess,一切

7、就从这里开始了。(2)CreateProcess这个函数可作了不少工作。App进程由此诞生。当CreateProcess这个函数被调用,系统就会创建一个“进程内核对象”。进程内核对象可以看作一个操作系统用来管理进程的内核对象,它也是系统用来存放关于进程统计信息的地方(一个小的数据结构),其实它的真止创建者是一个叫NtCreateProcess的windows2000系统服务函数(也叫执行体服务函数),他创建了进程内核对象供用户扩展。进程内核对象的初始使用计数为io然后系统为该进程创建4GB(二2"32)的虚拟地址

8、空间(所谓虚拟就不是真的创建4GB的物理内存空间,这些空间不是真在物理内存上).用于加载App.exe可执行文件和任何必要的dll文件的数据和代码。(3)下面概述一下系统的加载器(可称为loader)是如何加载这些东东的。首先了解一下系统为该进程创建4GB的虚拟地址空间是如何分配的,对于win2000/winxp来说,默认情况下每个用户进程可以占有2GB的私有地址空间;操

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。