日期:2014-05-16  浏览次数:20566 次

为什么链接器本身是个ld.so文件? 那又由谁去把这个ld.so加载到进程空间呢?
今天在看<<C专家编程>>,里面P126显示一个调用了共享库的进程,内存映像的一个图。里面在高地址(堆栈的下方),是链接器。

我上网搜了一下,发现ld确实是一个动态库ld.so.

问题是,人不能提着头发把自己抓起来,对吧,那么ld.so怎么把自己加载到进程地址空间呢?
这个ld又是链接的工具,又是程序装载的工具,如何被调用的呢?

------解决方案--------------------
程序装载的工具,没说库本身就是装载程序吧。
可执行文件包含一个import directory表,表的每一项包含一个库的名字。
根据表中记录的名字,装载程序在硬盘上搜索需要的库,然后将其加载到内存中预先不确定的位置,之后根据加载库后确定的库的地址更新可执行程序。