程序的真正入口_小程序入口

(21) 2024-09-30 10:01:01

 VC++开发的程序,在调试时总是从main或者WinMain函数开始,这就容易让人误会它们是程序的第一条指令执行处,这个认识其实是错误的main和WinMain也是一个函数,也需要一个调用者,在它们被调用前,编译器其实已经做了很多的事情,所以main或者WinMain应该是语法规定的用户的入口,而不是应用程序入口。

  在应用程序被操作系统加载时,操作系统会分析执行文件内的数据,分配相关资源,读取执行文件中的代码和数据到合适的内存单元,然后才是执行入口代码,入口代码其实 并不是 main或者WinMain,通常是mainCRTStartup,wmainCRTStartup,WinMainCRTStartup,wWinMainCRTStartup。前2个是控制台环境下的启动函数,后2个是windows环境下的启动函数。

     程序的真正入口_小程序入口 (https://mushiming.com/)  第1张

 图中显示程序运行时调用了三个函数,依次是KERNEL32、mainCRTStartup和main。

 main函数被调用前要先调用的函数如下:

程序的真正入口_小程序入口 (https://mushiming.com/)  第2张

 

 这些函数调用结束后会调用main函数,根据main函数调用特征,会将3个参数压入栈内作为函数的参数。三个参数分别为,命令行参数个数,命令行参数信息和环境变量信息。

THE END

发表回复