|
|
1
5
对于elf格式,确实不需要知道哪些符号属于哪个库,因为实际的符号解析是在程序执行时发生的。但按惯例
使用
应该发出警告,但仍然创建可执行文件。请注意,您仍然需要提供库名称,否则
在windows上,链接器需要确切地知道哪个符号属于哪个库,以便生成必要的导入表。因此,不可能用未解析的符号构建pe二进制文件。 |
|
|
2
3
作为安全措施,可执行文件的代码段始终是只读的,因此不能让程序在运行时修改自己的代码。正如其他人所提到的,链接器所做的是生成每个库提供的符号的列表。 您建议将此进程推迟到运行时,但这意味着,如果在链接时提供的库列表不完整,则每次启动此进程时,二进制文件都可能崩溃。为什么你会冒这个险,当你可以简单地检查链接时? 将符号解析推迟到运行时意味着每次运行程序时,它将在所有依赖项中对所有未解析符号执行相同的搜索。 此外,如果在链接时不必给出库列表,则意味着它必须尝试 全部的 运行时可能的库。如何解析由多个库定义的符号? 据我所知(以非常简单的方式),动态链接器在运行时所做的是保留一个散列表,将这些符号映射到程序的地址空间后,将它们转换为动态链接库中的地址(函数指针)。在可执行文件中,链接器需要知道哪个库提供每个符号(函数、变量等)来执行此解析。
所以,在这个
非常简单的解释
,你的电话
|