链接
静态链接
符号解析
将每个符号引用刚好和一个符号定义联系在一起。
重定位
编译器和汇编器生成从地址0开始的代码和数据节。链接器把符号定义与存储器的位置联系起来。然后修改所有对这些符号的引用,是的他们指向这些存储器的位置,从而重定义这些节。
基础知识
目标文件纯粹为字节块的集合。有的包含程序代码。有的包含程序数据。包含指导链接器和加载器的数据结构。链接器将块链接起来。确定被链接块运行时的位置。
目标文件
1.可重定位目标文件。
2.可执行目标文件。
3.共享目标文件。
可重定位目标文件
ELF头 |
---|
.text |
.rodata |
.data |
.bss |
.symtab |
.rel.text |
.rel.data |
.debug |
.line |
.strtab |
节头部表 |
符号和符号表
可重定位目标模块m都有一个符号表。包含m所定义和引用的符号信息。总共有三种不同的符号。
1.m定义并且被其他模块引用的全局符号。
2.其他模块定义并且被模块m引用的全局符号。
3.只被m定义和引用的本地符号。
typdef struct {
int name;
int value;
int size;
char type:4
binding:4
char reserved;
char section;
}Elf_Symbol
static的属性隐藏变量和函数名字。
链接
静态链接
符号解析
将每个符号引用刚好和一个符号定义联系在一起。
重定位
编译器和汇编器生成从地址0开始的代码和数据节。链接器把符号定义与存储器的位置联系起来。然后修改所有对这些符号的引用,是的他们指向这些存储器的位置,从而重定义这些节。
基础知识
目标文件纯粹为字节块的集合。有的包含程序代码。有的包含程序数据。包含指导链接器和加载器的数据结构。链接器将块链接起来。确定被链接块运行时的位置。
目标文件
1.可重定位目标文件。
2.可执行目标文件。
3.共享目标文件。
可重定位目标文件
ELF头 |
---|
.text |
.rodata |
.data |
.bss |
.symtab |
.rel.text |
.rel.data |
.debug |
.line |
.strtab |
节头部表 |
符号和符号表
可重定位目标模块m都有一个符号表。包含m所定义和引用的符号信息。总共有三种不同的符号。
1.m定义并且被其他模块引用的全局符号。
2.其他模块定义并且被模块m引用的全局符号。
3.只被m定义和引用的本地符号。
typdef struct {
int name;
int value;
int size;
char type:4
binding:4
char reserved;
char section;
}Elf_Symbol
static的属性隐藏变量和函数名字。
网友评论