编译与链接
文章平均质量分 94
天天摸鱼身体棒
这个作者很懒,什么都没留下…
展开
-
动态链接分析和总结
再假设module.c是一个共享模块的一部分,那么再-fPIC的作用下,产生的依然是跨模块的代码,因为编译器无法确定对global的引用时跨模块的还是模块内部的,而且即使时模块内部的,那么可执行文件还是可以对global进行引用,也会导致上面的问题,所以共享模块对global的应用都需要指向可执行文件中的副本。假设A.o和B.o依赖C.o;不过在现代的体系结构中,数据的相对寻址是没有 相对于当前指定地址(PC) 的寻址方式的,所以ELF用了一个巧妙地方式得到PC地址,然后再加上偏移量就得到数据地址了。原创 2023-02-09 13:26:03 · 912 阅读 · 0 评论 -
可执行文件的装载
这边讨论了进程创建的一个大概的流程,主要是通过实验介绍了进程在创建的时候,是如何使用读取ELF文件的Segment信息的。还通过对《程序员自我修养》一书中的例子进行分析,详细分解了进程在加载Segment的时候是如何对物理页面的使用进行优化的。原创 2023-01-17 16:28:35 · 955 阅读 · 1 评论 -
静态链接过程分析
这边通过一系列的实验来分析了静态链接时链接器要做的主要的事情,其中重定位是链接过程中比较重要的过程。这边实验的平台使用的X64环境下的, 与书中的环境不太一致,所以导致readelf -r的输出的重定位类型不太一样,但基本结果还是服合预期的。原创 2023-01-16 02:28:05 · 551 阅读 · 0 评论 -
ELF文件格式解析
这边较为深入的介绍了ELF Header 、section Header 、以及secton的结构,并使用了《程序员的自我修养-链接、装载与库》这本书上的例子作为实验的内容,详细展现了目标文件中的这些信息应该如何解读。在知道了目标文件中的结构后,接下来的问题就是如何在链接的时候将他们组合起来,形成一个可执行文件或者是.so文件。原创 2023-01-13 17:06:23 · 1762 阅读 · 0 评论