一 应用程序启动方式
链接器选择CRTT启动函数,进而选择启动函数。
四个启动函数
连接时的选择方式:
以VC为例
搜索 链接选项 /SUBSYSTEM: 如果是Console, 且非 unicode,则调用 _mainnCRTStartup,其中会调用 main。 如果是 WINDOWS,且非 unicode,则调用 _WinMainCRTStartup。 Unicode版本则对应调用w开头的。
CRTstartup函数的具体职能如下:
• 检索指向新进程的完整命令行的指针。
• 检索指向新进程的环境变量的指针。
• 对C / C + +运行期的全局变量进行初始化。如果包含了S t d L i b . h 文件,代码就能访问这些变量。表4 - 1 列出了这些变量。
• 对C 运行期内存单元分配函数(m a l l o c 和c a l l o c )和其他低层输入/输出例程使用的内存栈进行初始化。
• 为所有全局和静态C + +类对象调用构造函数。
二 应用程序句柄和模块句柄
G e t M o d u l e H a n d l e (LPSTR lpszModuleName)
0x04000000
应用程序句柄实际是系统将可执行文件的映象加载到进程的地址空间时使用的基本地址空间。
当参数为NULL时候,返回应用程序句柄。否则,去查找响应的DLL或者进程的名字,返回其地址。
三
四 进程的环境变量
DWORD GetEnvironmentVariable( PCTSTR pszName, PTSTR pszValue, DWORD cchValue);