[学习/笔记] 程序员的自我修养-第五章
侧边栏壁纸
  • 累计撰写 65 篇文章
  • 累计收到 3 条评论

[学习/笔记] 程序员的自我修养-第五章

x1n
x1n
2022-01-19 / 0 评论 / 14 阅读 / 正在检测是否收录...
本书中,这部分内容很短,其实也没什么好说的,和ELF大同小异,即使是不同的地方我觉得也完全没有必要在笔记中细细区分,更重要的是能理解这种分段文件结构的思想

    第五章很早就看完了,一直没有上传笔记,本章核心内容不多,只做了解即可
    COFF 文件也有文件头和段表、段表后紧跟各种段,文件最末尾是符号表。而 COFF 中特有的 drectve 段和 debug$ 段将在下文记录

5 PE/COFF

5.3 链接指示信息

    drective段储存编译器给链接器的信息,除了基础的段属性(段名,大小,标志位)之外,RAW Data部分提供编译器希望传递给链接器的参数,书中举例为"/DEFAULTLIB:LIBCMT" 表示该文件需要 LIBCMT 这个默认库,链接器会自动的把它添加到链接参数中。

5.4 调试信息

    .debug$x相关段均包含着调试信息,x = S 表示 Symbol信息, x = P 表示 precompiled 信息, T 表示 Type 信息。具体定义在 PE 格式文件标准中

5.6 PE

    PE 基于 COFF,它的文件头不是 COFF 头,而是 DOS MZ 头和桩代码,COFF 头的映像头扩展成了PE头,增加了 “PE扩展头部结构” (PE Optional Header)
虽然 DOS 和 Win 使用相同的可执行文件扩展名.exe,但是DOS下的可执行文件是MZ格式,这与 Win 下的 PE 完全不同,但是 PE 文件设计之初要考虑到对 DOS 的兼容性,PE 中的IMAGE_DOS_HEADER和 DOS Stub就是为此设计。 DOS Stub的唯一作用是输出cannot run in DOS,PE中DOS Header的“e_cs, e_ip”(这两项为DOS文件中的程序入口)直接指向了DOS Stub而非真正的程序入口

PE扩展头的字面意思是可选,但是它事实上是不可选的,在本章只简单的介绍一下与静态链接相关的数据成员

5.6.1 PE数据目录

    为了让系统可以很快的找到装载相关数据结构,如导入表、导出表、重定位表等,这些数据的位置和长度都保存在了“数据目录”中,大小为16,每一个元素对应一个包含一个东西的表,具体含义和下标的对应情况包含在IMAGE_DIRECTORY_MY_TABLE 这一系列宏中

0

评论 (0)

取消