链接

2019-07-21  本文已影响0人  bigCatloveFish

链接

静态链接

符号解析

将每个符号引用刚好和一个符号定义联系在一起。

重定位

编译器和汇编器生成从地址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的属性隐藏变量和函数名字。

上一篇 下一篇

猜你喜欢

热点阅读