C 语言中 标识符的使用机制

本文介绍了C语言从预编译到链接的编译过程,并详细阐述了标识符在变量、数组和函数中的作用,包括它们在内存中的表示,如变量值、虚拟地址、数组起始地址和函数指针的使用。
摘要由CSDN通过智能技术生成
    将源文件编译成可执行程序,需经历四个过程 
  • 预编译  将头文件插入到源文件中,删除注释,替换宏...等等
  • 编译     将C语言的源文件编译成汇编语言源文件
  • 汇编     将汇编语言源文件传化成机器语言文件,即目标文件
  • 链接     将目标文件链接成可执行文件
    前三个过程相对而言,不是很复杂。重点放在链接过程如何将多个目标文件链接成可执行文件的。linux下目标文件和可执行文件都采用的是ELF格式,每个ELF文件都包含多个section,如:.test .data .rodata .rela.text .symtab ...。其中目标文件中的重定位表(如:.rela.text)和符号表(.symtab)在链接过程中起着非常重要的作用。连接器根据中重定位表来确定目标文件中需要重定位处的地址--全局标识符在指令中的位置,并根据符号表来查找标识符对应内存区的地址。
      重定位表包含结构Elf64_Rel的对象数组,每个数组元素对应一个需要重定位的地址。定义在/usr/include/elf.h 
typedef struct
{
  Elf64_Addr     r_offset;  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值