南大计算机系统基础——链接

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

在学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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值