程序员的自我修养 读书笔记 chp3

3.1 目标文件的格式

  1. PC 平台流行的可执行文件的格式主要是 windows 下面的 PE 和 Linux 下的ELF, 他们都是COFF 格式的变种

3.2 目标文件是什么样的

  1. 一般来说, text 段放置代码, data段放置初始化的数据(全局变量或者静态变量), bss 放置未初始化的数据(全局变量或者静态变量)
    这里写图片描述

  2. bss 段只是为未初始化的全局变量和静态变量预留了位置, 并没有内容, 不会占有空间

  3. 将程序指令和数据分离的好处

    1. 方便权限控制
      1. 代码段只读, 数据段可读可写
    2. 提高程序的局部性,提高缓存的命中率
    3. 当系统中运行多个程序的副本的时候, 可以共用一份代码数据页面

3.3 挖掘SimpleSection.o

  1. 代码段
    1. 实际上就是text 段中的字节码
  2. 数据段和只读数据段
  3. BSS段(未初始化的全局变量或者局部静态变量)
  4. 其他

3.4 ELF 文件结构描述

这里写图片描述

3.4.1. 文件头

2. 文件头中定义了ELF魔数,文件机器字节长度,数据存储方式,版本,运行平台, ABI版本, ELF重定位类型,硬件平台版本,入口地址,程序头入口和长度,段表位置长度,段的数量等信息
    3. ELF 魔数, 一般是用来确认文件的类型的
3. 简单来说, 就是定义了一堆程序运行的说明信息

3.4.2 段表

  1. 通过ELF 文件头中的e_short 字段指定段表位置,定义了段的基本信息
  2. 段的名字只在链接和编译的过程中有意义,但不能真正表示段的类型
    这里写图片描述

3.4.3 重定位表

  1. 连接器在处理目标文件的时候,需要对目标文件中的某些部位进行重定位, ie, 代码段和数据段中那些对绝对地址的引用的位置。这时候需要有一个重定位表

3.4.4 字符串表

3.5 链接的接口–符号

  1. 符号可以看成是链接中的粘合剂
  2. 符号修饰和符号签名

    1. extern “C”

      
      #ifdef __cplusplus
      
      extern "C" {
      
      #endif
      
      
      void * memset(void *, int, size_t)
      
      
      #ifdef __cplusplus
      
      }
      
      #endif
      
  3. 强弱符号
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值