加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – ASLR会导致Dlls加载缓慢吗?

发布时间:2020-12-14 01:44:30 所属栏目:Windows 来源:网络整理
导读:在MSVC中,Base Address Randomizaiton是默认选项.(自VS2005起?) 所以,我不再手动重新设置dll的基地址. 但是当我使用VS2003时,我重新调整了我的所有dll以提高加载性能. 如果我使用ASLR选项,加载性能总是会降低吗? (我可以获得其他好处) 最简洁的答案是不.
在MSVC中,Base Address Randomizaiton是默认选项.(自VS2005起?)

所以,我不再手动重新设置dll的基地址.

但是当我使用VS2003时,我重新调整了我的所有dll以提高加载性能.

如果我使用ASLR选项,加载性能总是会降低吗?
(我可以获得其他好处)

最简洁的答案是不.

在没有ASLR的系统(例如XP)上,在非首选地址加载DLL有几个成本:

>必须解析重定位部分,并且必须将修正应用于整个图像.
>应用fixups的行为会导致写入时写入错误,这些错误在CPU方面相对昂贵,并且即使它们未被应用程序本身引用,也会强制从磁盘读取页面.
>将DLL加载到非首选地址的每个进程都会获取写入的每个页面的私有副本,从而导致内存使用量增加.

第2项和第3项是迄今为止最大的成本,也是之前手动重新定义DLL的主要原因.

使用ASLR,操作系统透明地应用修正,使其看起来像DLL实际上是在其首选地址加载的.没有写时复制错误,也没有创建进程私有页面.此外,修正仅应用于应用程序实际访问的页面,而不是整个图像,这意味着不会从磁盘读取额外的数据.

除此之外,手动重新定位方案无法阻止所有基地址冲突(例如,来自不同供应商的DLL可能会相互冲突,或者由于修补程序而导致操作系统DLL的大小增加并且溢出到保留的范围内一些其他DLL等). ASLR在处理这些问题时效率更高,因此在整体查看系统时,它实际上可以提高性能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读