有人说,这本书只是比<loader and linker> 多一些实例罢了,但是我稍微看了一下loader and linker,比较难以读懂,而且没有中文译本。
所以还是跑回来看这本书,潘老师推荐的,应该不会有错吧!
2012.7.13
第四章,静态链接中,
1. 弱类型与强类型: 弱类型如未初始化的全局变量定义等。我的理解是,不是在本文件中定义的变量都是弱定义。
2. 静态链接库,是用ar把一些.o文件打包的集合。静态链接库中,每个.o文件只含有一个函数,因为静态链接会把函数包含进入自己编写的程序中,为了减小程序的体积,所有静态链接库中的每个.o文件只包含一个函数。
3. 链接控制一般有三种方法:
(1) 使用命令行来给链接器指定参数,如ld的-o -e参数,就属于这一类。
(2) 将链接指令存放在目标文件里面,如Visual c++就把链接参数放在PE目标文件的.drectve段以用来传递参数。
(3) 使用链接控制脚本,这是最灵活最强大的链接控制方法。
ld的默认的链接脚本放在/usr/lib/ldscripts/下,不同的机器平台、输出文件格式都有相应的链接脚本。Intel IA32下普通可执行ELF文件链接脚本为elf_i386.x; IA32下,共享库的链接脚本文件为elf_i386.xs等。
2012.7.13
loader:
如何加载可执行文件? 就是调用exec来加载,分配内存等
crt:
C runtime library, 用exec加载可执行文件,但是可执行文件不仅仅只有我们写的main这些函数,在执行main还需要做许多的操作,这就是crt的作用。crt在glibc和msvc/crt中
对应的也有c++ runtime library
这本书真是叫做修养,一点都不言过其实,两年后才真的读懂了这本书,
从system call->crt->main, 所有程序执行遇到的东西都将透彻了,好书,必须的推荐
2014.7.30