1. 重定位:
链接时重定位:
目标文件一般由多个节组成,编译器在编译每个目标文件时一般都是从0地址开始生成代码。当多个代码节合成一个代码段时,需要根据其在最终代码段中的位置做出调整。同时,链接器需要对已经解析的符号分配运行时地址。这个过程就是重定位。
加载时重定位:
程序中可能调用了DLL,由于EXE是最先被加载的,所以一般都能加载到其想要的内存地址上;而DLL的加载一般在EXE之后,就需要对DLL中的地址进行重定位了。
2. 程序的启动过程
WIN32程序启动过程包括:
(1) 操作系统把程序加载到内存,并建立相应的运行环境
(2) 应用程序自身的初始化过程
备注:应用程序必须符合PE格式,主要包含:data(数据段),.text(代码段)。数据和代码加载到内存中后,CPU从程序入口处按顺序取出每一条指令并执行。
内存中,应用程序的代码表现为一系列有序的指令集。
加载器:操作系统加载器的任务是,把磁盘中可执行程序的物理文件读入内存,并转换成程序在内存中的表示。
3. 编译链接和启动
编译链接: