当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

<b>操纵DelayLoad来优化利用程序的性能及拦阻API</b>[VC/C++编程]

赞助商链接



  本文“<b>操纵DelayLoad来优化利用程序的性能及拦阻API</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

在 1998年12月的MSJ出版刊物中, Jeffrey和我写了关于 在 vc6中利用DelayLoad 功效的专栏.终究后果,是证明了它是多么cool.但是,不幸的是,还有很多人不理解DelayLoad,他们认为这个新特点是 最新版本的WINNT才有的.

在开始的时刻,让我重申一遍:DelayLoad不是最新的操作系统带的特有功效,它可以在任何win32系统中起作用.我将写一个简单例子来阐明. DelayLoadProfile, 实现了一个很小功效,很多程序都可以得益于它.

预览:

普通的,当调用一个dll中的函数时,衔接器会将dll和函数加入你的可履行文件.最后,全部引用的函数会放在imports段中. 当加载该程序的时刻,win32程序加载器会扫描全部imports段的每个dll.加载,和重新定位imports段的全部函数,将信息写入 引入地址表(ImportAddress Table, IAT).简单说来,IAT就是一个函数指针的表.调用该 引入函数的时刻,就到IAT中去找. 那么,DelayLoad的机理是什么呢?当你为一个Dll举行"DelayLoad"的时刻,衔接器不将本来的值放入imports段,相反,它为每个DelayLoad的引入函数的名称和地址,生成一个小的根区, 备份下来.第一次引用的时刻,它调用LoadLibrary加载Dll,然后,它调用GetProcAddress获得该函数的地址.最后,改写自己在IAT的值,以便今后的程序可以直接调用.

上面的是简化的步骤.实际上,根区是一小段代码,它以静态的方法衔接到可履行文件中.代码在delayimp.lib中,必须被 衔接程序引用.并且,该代码要充足智能,当一个函数第一次被引用的时刻,要调用LoadLibrary,今后调用就不用引用了. 和引用Dll相比,DelayLoad不会加太多的时间和空间,这种方法 调用LoadLibrary只会惹起略微一点点的性能丧失.每次程序启动,在针对引入表的函数地址定位的时刻,顺次对DelayLoad引入的调用GetProcAddress,相关于Win32加载器来说,所丧失的性能也可以忽视不记.


  以上是“<b>操纵DelayLoad来优化利用程序的性能及拦阻API</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .