这篇文章讲一个EXE文件从加载运行到结束的整个流程,感觉写的不错, 记录并共享下。
下面列的只是程序执行时的大概流程,详见附件。
1、Shell(Explorer.exe)调用CreateProcess函数激活exe程序
2、系统创建一个进程内核对象,引用计数置为1
3、系统为进程创建一个4GB的进程虚拟地址空间
4、PE装载器把exe的代码映射到地址空间,并查找Import Table引入相关
的动态链接库(DLLs)
5、系统为进程创建一个主线程,线程得到CPU后,把CS:IP指向.text节中
的程序进入点(OEP),此处是一条JMP指令,它跳到XXXCRTStartup
函数处执行
6、这里完成c/c++运行期库的一些初始化设置,包括c++构造函数的调用
全局变量,静态变量的初始化
7、调用WinMain/main函数,进入主函数
8、注册窗口类,创建窗口,显示窗口,更新窗口,进入消息循环
9、窗口关闭,循环退出,返回到C/C++运行期库
10、完成一些清理工作
11、最后是ExitProcess退出进程
完整文档: 一个exe可执行文件的生与死.doc
一个exe可执行文件的生与死.pdf
posted on 2014-04-05 11:48
Richard Wei 阅读(2440)
评论(0) 编辑 收藏 引用 所属分类:
windows desktop