我会对Linux和NT(或其他任何问题)的答案感兴趣
修改
感谢Laurion的回答。
此处提供更多信息:
答案 0 :(得分:3)
运行时加载程序通常会在加载模块时修复对导入函数的引用。它查看导入函数的表并放入正确的地址。该模块通过间接表使用导入的函数。
答案 1 :(得分:0)
之前为Windows内核(和windows用户空间)编写了一个加载器:它以相同的方式工作。基本上所有二进制文件都有称为IAT的东西(例如,http://msdn.microsoft.com/en-us/magazine/cc301808.aspx这是永恒的经典论文)。当加载器为DLL分配内存时,它将复制DLL,并读取DLL所需的所有符号的DLL(按名称),然后在Windows核心DLL的导出部分中查找名称(例如, ,kernel32.dll),并用读取的地址填写。在DLL可以继续执行之前,必须读取所有需要的文件并进行地址填充。
Linux也以同样的方式工作.....无论是用户空间还是内核。 ELF结构称它为重定位表。
http://www.bravegnu.org/gnu-eprog/linker.html
希望有帮助:-)(x86 arch的详细信息类似)。