Win32动态连接库基址重置技术.docx
《Win32动态连接库基址重置技术.docx》由会员分享,可在线阅读,更多相关《Win32动态连接库基址重置技术.docx(25页珍藏版)》请在优知文库上搜索。
1、编辑:Jsz目录:摘要/引言应用程序动态联接库(D1.1.)建立动态联接库理论数据建议其他因素/Win32动态连接库基址重置技术RuedigerR.AscheMicrosoftDeveloperNetwork技术小组摘要本文讨论了MiCrOSOftWindowsNT和MiCroSOftWindows95动态链接库(dynamic-linklibrary,D1.1.)基址重置(rebasing)的若干问题(在本文中,“Rebasing,基址重置”一词指的是在内存空间中改变动态链接库基地址的过程)。随本文章提供了一个应用程序实例和一个动态链接库套件,读者可以从中进行一些比较。引言开发人员常问到的一
2、个问题是,“当操作系统对动态链接库(D1.1.)进行基址重置时,会出现什么效果?基址重置会带来什么损失?有什么办法可以避免这些损失?是否有办法修改代码以减少基址重置所带来的修补(fixup)工作?”由于这些问题很有代表性,所以本文将集中讨论一下加载动态链接库(D1.1.)的有关问题,希望为使用动态链接库(D1.1.)的读者提供一定的参考。事实上,本文给出的结果也许并不太新奇,也不太具有“革命性”,比方说:最好选择较大的动态链接库(D1.1.),而不宜选择一大堆小的动态链接库;确定系统不需要花费很长时间搜索动态链接库;如果操作系统有可能对动态链接库进行基址重置,应尽量避免由此而带来的修补工作(或
3、者也可以使用另一种办法,尽量选定用户基地址,防止基址重置现象的发生)。然而,正如一句古老言语所说的那样,“过程即目标(Thejourneyisthegoal.)w三换句话说,作者在写作本文时,发现了大量的有关动态链接库和内存管理的小问题、小技巧,作者认为,这些问题和技巧是值得与大家分享的。也许,这篇文章更合适的名字应该是“动态链接库点滴”o在本文中,将给出一个作者自己写的样本测试应用程序,此程序用于测试动态链接库的加载时间。本文还将提供一些测试用的动态链接库。公,参考资料附录A:运行测试程序的结果(NT)附录B:运行测试程序的结果(Win95)下一页应用程序您是本站自1999.4.5以来第巨客
4、人!Win32动态连接库基址重置技术RuedigerR.AscheMicrosoftDeveloperNetwork技术小组应用程序用于测试动态链接库(D1.1.)加载时间的测试集结构非常简单,主要包括:使用MiCrOSOft基础类库(FoundationClasslibraries,MFC)编写的PAGETEST应用程序,此程序包含两个线程。第一个线程(主应用程序)建立并拥有默件(mutex)对象。此线程对当前时间进行采样,然后调用1.oad1.ibrary函数,以显式方式加载作者提供的库(本文下一节将讨论这些库)。与此同时,第二个线程等待默件(mutex)对象发送信号。所有的库都由动态链接
5、库的入口程序组成。在动态链接库(D1.1.)入口程序的PROCESSATTACH发送点,默件(mutex)对象发送信号。此时,辅助的应用程序线程被唤醒,在调用1.oad1.ibrary函数之前,计算采样时间和当前时间之间的差值。这个时间差值大致上就是D1.1.装入内存所需的时间。MFC应用程序有一个反复加载和卸载D1.1.的选项(50次),通过反复加载,可以计算出有意义的平均加载时间。编辑:Isz目录:摘要/引言应用程序动态联接库(D1.1.)建立动态联接库文章不需要讨论应用程序的特性,因为本文中使用的程序都是简单的MFC应用程序,所有的相关代码都存在于显示类中。显示类由CEaSyOUIPUt
6、vieW函数引出,用于提供简单的显示结果。(欲知进一步的细节,请参阅WindowsNTSecurityinTheoryandPracticew,WindowsNT安全性理论与实践)读者应该注意,这种经验式的测试方法有很多缺陷,因此测试结果有可能与实际结果相背离,这主要因为: 作者假设时间抽样机制是有效而可靠的,抽样力度足够细。(作者使用了系统性能计数器) 作者假设线程切换机制是连续有效的,对唤醒辅助线程所需时间没有非常不良的影响。 测试结果在很大程度上,依赖于底层硬件(也就是说,下列一些因素也会对测试结果产生影响,如运行测试程序的计算机速度、所使用的处理器数目、硬盘控制器的速度、等等)。 测试
7、结果使用特定版本的软件进行抽样。(操作系统版本、C运行时间库版本、等等。) 通常情况下,大多数动态链接库都是隐式加载的,而不是显示加载的。这就要求作出如下假设:隐式加载D1.1.与显示加载D1.1.所用的时间一样长,相应的其他参数也相同。更糟糕的是,作者所得到的数据有时相差很大。因此,读者应该有保留地接受这些结果。在测试结果中,更有参考价值的不是加载所需的绝对时间,而是相对时间。换句话说,重要的是调整某一参数对加载行为的影响,以及不同策略之间的加载结果比较。如果读者希望在自己的计算机上重建测试结果,可以按照下一节将讨论的动态链接库定位指令,运行PTAPP.EXE,并在MUItiPIeTeSt菜
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Win32 动态 连接 基址 重置 技术
