基于RISC-V的编译链接和装载01之概论
基于RISC-V的编译链接和装载01之概论
对于底层软件开发者来说,如果想系统的了解程序的链接装载过程,《程序员的自我修养—链接、装载与库》是一本很好的书,但是这本书存在如下几个问题:
- 这本书是2009年出版,时代比较遥远,有些内容需要更新;
- 书中约有一小半Windows相关内容,对于linux嵌入式工程师来说是不需要了解的,Windows和linux混在一起容易让重点不突出;
- 书中穿插了一些C++知识,对嵌入式C工程师而言,也非必需;
- 书中以x86为例作为讲解的,但本系列改用以RISC-V为例作为讲解。(当然,不同指令集的编译链接过程大同小异,但我觉得RISC-V没有历史包袱,实现更简洁)
基于上述原因,我觉得有必要重新梳理这块内容,本系列基于RISC-V平台讲述了编译-链接-装载过程,本系列参考一些大佬的文章,文末有列出参考,一并表示感谢。
这系列文章准备先介绍ELF格式,ELF格式全称为Executable and Linkable Format(可执行可链接格式),由这个名字可以看出,ELF包含执行与链接两方面作用,ELF格式是链接装载的基础,所以放在前面介绍,然后介绍编译,链接,和装载。
文中使用了一些测试用例用来辅助讲解,见github:https://github.com/surez-ok/riscv-elf-link-load.git
文章链接如下:
- 基于RISC-V的编译链接和装载01之概论
- 基于RISC-V的编译链接和装载02之ELF格式简介
- 基于RISC-V的编译链接和装载03之ELF文件头详解
- 基于RISC-V的编译链接和装载04之ELF之节(section)
- 基于RISC-V的编译链接和装载05之ELF之段(segment)
- 基于RISC-V的编译链接和装载06之编译
- 基于RISC-V的编译链接和装载07之静态链接
- 基于RISC-V的编译链接和装载08之静态ELF装载
- 基于RISC-V的编译链接和装载09之动态链接1
- 基于RISC-V的编译链接和装载10之动态链接2
- 基于RISC-V的编译链接和装载11之动态链接3
- 基于RISC-V的编译链接和装载12之动态ELF装载
- 基于RISC-V的编译链接和装载13之ld链接脚本
- 基于RISC-V的编译链接和装载14之链接时的map文件
- 基于RISC-V的编译链接和装载15之链接器的垃圾回收
- 基于RISC-V的编译链接和装载16之链接器松弛
- [基于RISC-V的编译链接和装载17之linker overlay](基于RISC-V的编译链接和装载17之linker overlay.md)
- 基于RISC-V的编译链接和装载18之库与运行环境
参考:
- 《程序员的自我修养—链接、装载与库》

浙公网安备 33010602011771号