动态链接库(dll)可以是早绑定吗?

顽_石 2015-02-26 11:15:08
我知道dll并没有被编译到应用程序中,它只是在该应用程序要使用它时才加载进内存中;
我还知道,早绑定是在编译时就确定了调用函数的位置,晚绑定是程序在运行时根据一些特殊的机制计算出来要调用函数的位置;
根据这两点,我猜测,是不是因为dll是运行时才被加载至内存中这个原因,才决定dll肯定是晚绑定呢?
或者说,在程序链接时,就固定好了dll的位置,因此dll也可以是早绑定呢?

还请哪位大侠给普及一下这方面的知识,先谢了。
...全文
168 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xwhmm 2015-08-03
  • 打赏
  • 举报
回复
引用 3 楼 painie8000 的回复:
[quote=引用 2 楼 zhao4zhong1 的回复:] 《程序员的自我修养——链接、装载与库》 《深度探索C++对象模型》 《C++反汇编与逆向分析技术揭秘》
吾仅问一是与非的问题,莫非您要激西江之水以迎吾?[/quote] 你一句话就像一大盆冰水 把人家从头浇到尾。。。。。。。。。。
顽_石 2015-02-27
  • 打赏
  • 举报
回复
引用 4 楼 adlay 的回复:
如果通过 lib 来链接 dll 的,dll 中函数的调用是通过输入表 IAT 由操作系统在加载 exe 的时候计算出来的,如果是手动 LoadLibrary/GetProcAddress 来调用的话,函数地址是你调用 GetProcAddress 时放到你自己程序中的变量里面来进行访问的。 无论哪种情况,都没有在编译期确定函数地址的,都属于你说的晚绑定。
也就是说,动态链接库的机制只有晚绑定?
www_adintr_com 2015-02-27
  • 打赏
  • 举报
回复
如果通过 lib 来链接 dll 的,dll 中函数的调用是通过输入表 IAT 由操作系统在加载 exe 的时候计算出来的,如果是手动 LoadLibrary/GetProcAddress 来调用的话,函数地址是你调用 GetProcAddress 时放到你自己程序中的变量里面来进行访问的。 无论哪种情况,都没有在编译期确定函数地址的,都属于你说的晚绑定。
顽_石 2015-02-27
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
《程序员的自我修养——链接、装载与库》 《深度探索C++对象模型》 《C++反汇编与逆向分析技术揭秘》
吾仅问一是与非的问题,莫非您要激西江之水以迎吾?
赵4老师 2015-02-27
  • 打赏
  • 举报
回复
《程序员的自我修养——链接、装载与库》 《深度探索C++对象模型》 《C++反汇编与逆向分析技术揭秘》
fly_dragon_fly 2015-02-27
  • 打赏
  • 举报
回复
OS在加载EXE时,会根据import表来装载所需的DLL,就是你所说的早绑定,应该叫静态绑定。dll肯定是运行时才载入的。通过loadlibrary来加载称为动态绑定,一般用在没有lib的情况,还有延迟绑定,其实也是差不多的机制
waterbright 2015-02-27
  • 打赏
  • 举报
回复
从设计目的来说,lib就是为了在编译期绑定,dll就是为了在运行时绑定,不会有你所谓的早绑定的情况

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧