从源文件到可执行文件
1.计算机只能运行本地代码:CPU能直接解析并运行的不是源代码而是本地代码的程序。作为计算机大脑的CPU也只能解释已经转换成本地代码的程序内容。
2.本地代码的内容:用记事本打开由代码清单的内容转换成本地代码得到的EXE文件。每个数值都表示某一个命令或数据,这里我们用的是原始的dump程序。
3.编译器负责转换源代码:能够把高级语言编写的源代码转换成本地代码的程序称为编译器。。编译器首先读入代码内容,然后再把源代码转换成本地代码。交叉编译器,它生成的是和运行环境中的CPU不同的CPU所使用的本地代码。
4.仅靠编译是无法得到可执行文件的:编译器转换为源代码后,就会生成本地代码,但是本地代码是无法直接运行的。,编译之后还要进行“链接”处理。把多个目标文件结合,生成一个EXE文件的处理就是链接,运行链接的程序就称为链接器
5.启动及库文件:库文件指的是把多个目标文件集中成保存到一个文件中的形式。链接器指定库文件后,就会从中把多个目标文件抽取出来,并同其他文件结合生成EXE文件。
6.DLL文件及导入库:Windows中,API的目标文件,并不是存储在通常的库文件中,而是储存在名为DLL文件的特殊库文件中。存储目标文件的实体,并直接和EXE文件结合的库文件形式称为静态库链接。
7.可执行文件运行时的必要条件:在程序运行时,虚拟的内存地址会转换成实际的内存地址。链接器会在EXE文件开头,追加转换内存地址所需的必要信息,这个信息称为再配置信息
8.程序加载时会生成栈和堆。栈和堆的相似之处在于,他们的内存空间都是在程序运行时得到申请分配的。根据编程语言的不同,对堆用的内存空间进行申请分配和释放的编写方法也是多种多样的。