Dll 加载时和运行时动态链接之间的差异

Dll 加载时和运行时动态链接之间的差异,dll,Dll,加载时动态链接和运行时动态链接有什么区别?您忘记了“家庭作业”标签 加载时链接意味着在应用程序启动时加载链接到的DLL,而不管您是否实际使用该DLL中的功能。动态链接意味着DLL的功能仅在实际需要时加载。加载时间动态链接 当一个可执行文件在构建时链接到一个DLL时,链接器将不会插入目标代码,而是插入一个存根,它基本上表示这个名称的函数位于这个DLL中 现在,当可执行文件运行时,可执行文件的位将丢失(即函数存根),因此在允许程序运行之前,程序加载器将通过用DLL文件的入口点替换这些缺失的函数来修复

加载时动态链接和运行时动态链接有什么区别?

您忘记了“家庭作业”标签


加载时链接意味着在应用程序启动时加载链接到的DLL,而不管您是否实际使用该DLL中的功能。动态链接意味着DLL的功能仅在实际需要时加载。

加载时间动态链接

当一个可执行文件在构建时链接到一个DLL时,链接器将不会插入目标代码,而是插入一个存根,它基本上表示这个名称的函数位于这个DLL中

现在,当可执行文件运行时,可执行文件的位将丢失(即函数存根),因此在允许程序运行之前,程序加载器将通过用DLL文件的入口点替换这些缺失的函数来修复这些缺失的函数

只有在所有存根都被替换(即解析)之后,才允许运行可执行文件

这就是加载时动态链接

运行时动态链接

在这种情况下,可执行文件没有链接到任何DLL库文件,因此它不会在DLL中包含任何存根,因此程序加载程序在运行可执行文件时没有问题

但是从DLL中的with访问函数的任务留给可执行文件,可以使用GetProcAddressWindows API来完成


这就是运行时动态链接。

加载时动态链接是在加载应用程序时由操作系统执行的。OS使用链接器在文件中放置的信息来定位dll的名称,然后搜索这些dll,如果找不到dll,它只会终止并给出错误消息,否则,OS会将dll映射到进程的虚拟地址空间并增加dll引用计数。

请查看: