在学CSAPP第七章链接,感觉CMU的老师讲的太快了跳过了很多细节,实在难以消化,因而去看了南大袁春风老师关于链接的讲解,感觉袁老师讲的十分清楚透彻。不过由于这一块的内容虽算不上很杂但是很多,因此在此记录一下笔记。
文章目录
1.可执行文件生成概述

①预处理

预处理将#define定义的宏直接粘贴到文本中,处理条件预编译指令,把#include 头文件中合适的文本粘贴进来。

②编译

③汇编

④链接


本次内容都以上面的两个c代码作为例子。
在main.c中定义了全局变量buf,全局函数main,在swap.c中定义了全局变量bufp0和local变量(这里不是一般说的那种局部变量,这里是以static变量为局部变量)bufp1,temp是分配在栈中的,链接不涉及。




⑤Linux操作

2.目标文件格式概述







3.ELF可重定位目标文件

①可重定位目标文件格式


②ELF Header(ELF 头)

readelf -h main.o可以查看ELF Header.

可以看到,ELF Header中有系统的基本信息,程序的入口Entry,程序头表(段头表)Program Header,节头表Section header(根据此可以导向节头表,节头表有更多的信息)的地址。
③Section Header Table(节头表)

readelf -S main.o查看节头表

这个感觉看起来好乱,可能是系统转为中文的原因,还是看PPT的把。


Section Header Table 节头表实际上就是各个section的索引,以及记录各个节的长度、对齐等重要信息。
④man readelf

4.ELF可执行目标文件
①可执行目标文件格式

②ELF Header(ELF 头)
readelf -h p可以查看ELF Header.

这篇博客详细记录了计算机系统中链接的过程,包括预处理、编译、汇编和链接的步骤。作者通过南大袁春风老师的讲解,深入探讨了ELF可重定位目标文件和可执行目标文件的格式,特别是ELF Header、Section Header Table和Program Header Table。博客还涵盖了符号解析、静态链接、动态链接以及PLT和GOT的概念。
最低0.47元/天 解锁文章
2233

被折叠的 条评论
为什么被折叠?



