Fullstar

Archives

  • December 2025
  • August 2024
  • July 2024
  • February 2024
  • November 2023
  • August 2023
  • July 2023
  • January 2023
  • November 2022
  • October 2022
  • September 2022
  • February 2022
  • January 2022
  • September 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020

Categories

  • Code
  • Lens
  • Life
0
Fullstar

Posts by month

January 2022

1 post
  • Code

链接原理浅析(基于Unix ELF文件格式)

  • January 23, 2022
  • Brandon
一.源文件至可执行目标文件的转换过程 1.预处理器: 处理以字节#开头的指令,将指向的文件原样替换当前#指令2.编译器: 将高级语言程序编译为汇编语言,经历过程: 词法分析,语法分析,语义分析,中间代码生成,中间代码优化,目标代码生成3.汇编器: 将汇编语言翻译为机器语言4.链接器: 将相互关联的文件组合起来,生成可执行程序 二. 目标文件 1.可重定位目标文件: 由汇编器生成,包含二进制代码与数据,可与其他可重定位目标文件合并,创建可执行目标文件2.可执行目标文件: 由链接器生成,包含二进制代码与数据,可直接拷贝到存储器并执行3.共享目标文件: 特殊的可重定位目标文件,可以在加载或运行时动态加载到存储器并链接 可重定位目标文件: 可执行目标文件:大体与可重定位目标文件相同。不同点在于ELF头部还包括程序的入口点, .text, .rodata, .data节已完成重定位,.init节定义函数_init, 由程序初始化代码调用,且由于已经完成链接因此不需要.relo节。段头表描述了可执行文件到存储器段的映射关系,即执行时存储器段地址,大小等。 符号: 每个可重定位目标模块m都有一个符号表(.symtab), 包含m所定义和引用的符号的信息。在链接器上下文中符号可分为三种: static属性的本地过程变量由编译器在.data和.bss中为每个定义分配空间,并在符号表中创建一个有唯一名字的本地链接器符号(即在变量名后添加.x,使得符号唯一) 符号表(.symtab): .symtab节由Elf_Symbol数组构成 可使用 readelf -s 指令查看符号表信息,示例: 其中Ndx=1表示.text节(函数名),Ndx=3表示.data节(变量名)…
View Post
Share
Fullstar

Input your search keywords and press Enter.