程序员的自我修养——链接、装载与库
文章平均质量分 96
凉、介
世界上有10种人:一种是懂得二进制的,另一种是不懂二进制的。
展开
-
动态链接那些事
动态链接那些事原创 2023-10-03 22:28:01 · 1049 阅读 · 0 评论 -
可执行文件的装载与进程
当我们在Linux系统的bash下输入一个命令执行某个ELF程序时,Linux系统是怎样装载这个ELF文件并且执行它的呢?首先在用户层面,bash进程会调用fork()系统调用创建一个新的进程,然后新的进程调用execve()系统调用执行指定的ELF文件,原先的bash进程继续返回等待刚才启动的新进程结束,然后继续等待用户输入命令。它的三个参数分别是被执行的程序文件名、执行参数和环境变量。在进入execve()系统调用之后,Linux内核就开始进行真正的装载工作。原创 2023-09-04 11:09:59 · 163 阅读 · 0 评论 -
静态链接过程
1、空间与地址的分配 现在的链接器空间分配的策略基本上都采用 “相似段合并” 的方式。通过将所有相同类型的 section 合并到一起,例如将所有输入目标文件的 .text 合并(按顺序合并)到输出文件的 .text 节中;然后,链接器根据运行平台中进程虚拟地址空间的划分规则,为所有输入目标文件中定义的节和符号分配运行时内存地址;完成之后,程序中的每条指令和符号都有唯一的运行时内存地址了。链接器的空间分配示意如下: 使用这种方法的链接器都采用两步链接的方法。 第一步,空间与地址分配。扫描所有的原创 2023-07-26 22:34:24 · 349 阅读 · 0 评论 -
ELF文件结构描述
经过上面的描述,我们了解到了强符号,弱符号,强引用,弱引用的概念。强符号可以替换弱符号。弱引用可以避免函数未定义的错误。强符号替换弱符号一些库中对外接口可以声明为弱符号。比如:实现一个 myadd(int num1,int num2) 接口,之后再将项目中的所有 add 替换为 myadd。这种方式可行,但是存在缺点:修改量大,并且后续人员不清楚背景,很有可能继续使用熟悉的 add 接口。更新 math 库,从更本解决此问题。这种方式比较推荐。原创 2023-07-22 16:57:08 · 157 阅读 · 0 评论 -
目标文件里有什么
1、目标文件 目标文件编译源代码后生成的文件叫做目标文件。原创 2023-07-21 23:40:47 · 120 阅读 · 2 评论 -
程序员的自我修养——链接、装载与库 笔记(一)
程序员的自我修养《程序员的自我修养——链接、装载与库》,初次听到这本书是因为学长学姐的推荐,其实在刚接触C语言的时候,就很好奇一个程序最终是怎么跑起来的,一个简单的输出“Hello Word!”中间到底经历了什么样的过程?奈何对计算机的了解刚刚入门,计算机的体系架构混乱,(计算机的五大部件,一开始我自信的告诉别人是:显卡、CPU、内存条、硬盘、电源)真想给当时的自己一巴掌~~~~,实在无法理解...原创 2020-01-08 19:56:13 · 776 阅读 · 2 评论