链接

作者: bigCatloveFish | 来源:发表于2019-07-21 00:19 被阅读0次

    链接

    静态链接

    符号解析

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

    重定位

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

    相关文章

      网友评论

          本文标题:链接

          本文链接:https://www.haomeiwen.com/subject/hbiplctx.html