据我所知,这些库通常与显式运行时链接(LoadLibrary)链接,但仍然存在那些包含库的一小部分子集的描述符的导入库。这是什么原因?
提前致谢和问候!
答案 0 :(得分:3)
“导入库”就是这样的:小存根,包含要在DLL内调用的实际函数的地址。 这是一篇很好的帖子,解释why you need import libraries 您可能还想了解链接在Windows世界on the same (great) blog
中的工作原理如果您对故事的另一端(执行时间)感到好奇,那么有一些很棒的文章介绍了Windows如何加载所需的DLL,example on MSDN和here以及{{3} },这有助于理解你的程序为什么/如何不调用LoadLibrary(直接)
当您使用来自其他DLL的代码或数据时,您正在导入它。加载任何PE文件时,Windows加载程序的一个作业是找到所有导入的函数和数据,并使这些地址可用于正在加载的文件。
根据链接器在IAT中写入的内容,加载器将加载DLL (有一篇关于NT内幕的更有趣的文章,但我无法在网上找到它。)
它们是为了“使链接器满意”,提供仅在DLL中不存在的信息。