dll的重定位和绑定技术可以优化应用程序的性能。我们知道,程序性能最本质的提升是算法(这里的算法绝不仅是1+1=2的问题)的改进,其他的改进只是一些配置的优化而已。

那么重定位和绑定属于哪一种呢?从原理上来说,应该说是属于后者。我们知道dll的默认基地址(image base)是0x1000000,如果应用程序同时载入两个dll映像文件,那么由于这两个dll不可能同时映射到同一个虚拟地址,所以会产生重定位的过程。对于隐式dll链接来说,这会增加应用程序初始化的时间,给用户一种程序反应慢得感觉。而显式链接虽然少去了初始化的开销,但是影响到程序执行时的性能(由于dll可能需要重定位)。

为了减少每次程序执行时,诸如上述所说的性能开销,我们必须找到一种一次解决,方便万世的方法。dll重定位应运而生。使用VC的Rebase,我们可以给dll设定不同的基地址,使得重定位的过程消失无形,这可以提高程序的性能。那么,到底该如何做呢?比如,有add.dll,minus.dll和可执行模块compute.exe,compute.exe用前两个dll来实现加减法操作。现在,我们使用Rebase对add.dll和minus.dll进行重定位。Ctrl+R,输入cmd,进入Console,输入Rebase -b 0x20000000 add.dll minus.dll,这时,我们用dumpbin /headers来查看add.dll和minus.dll的头部,会发现他们的基地址是从0x2000000开始的某个地址,而且两个基地址不同,也不相交。这样,当我们应用程序加载这两个dll的时候,就不存在重定位的问题啦。

重定位问题解决了,那么什么是绑定呢?当我们使用dumpbin /imports compute.exe时,我们可以发现,导入的函数只有序号和函数名,那么程序执行时,如何找到函数的地址(即入口)呢?这些工作是由加载程序来做的,他会根据每个dll的导出段的信息来修改可执行模块的导入段,所以,实际加载后,可执行文件的导入段包括了该函数在进程地址空间中的虚拟地址,序号和函数名。这里,我们同样看到了降低程序性能的缺憾。如果,在加载程序的时候,这些地址就已经有了,那么程序的性能不是又可以提升了吗?不错,办法总是有的。不过,这得在Rebase重定位的基础之上来实现,否者,毫无效果。在Rebase后,所有的dll模块都有了独立的基地址(dll之间不交叉),这同时也意味着每一个dll的函数在进程虚拟地址空间中的位置确立了,那么将这些地址写入可执行模块的导入段,将会省去加载程序修改导入段的过程,这样程序的性能又得到提升了,很不错吧。具体做法,Ctrl+R,输入cmd,进入Console,输入bind -u compute.exe即可。

重定位和绑定的联合使用可以极大地优化程序的性能,这样你写出来的程序看上去总是比不用这种方式的程序跑的快,你说说,如果你是客户,which is your choice!

如何使用Rebase以及bind来重定位和绑定dll相关推荐

  1. 关于可重定位目标文件的格式与其符号表的概述

            我们知道一个可执行的C程序要经过语言预处理.编译器.汇编器生成扩展名为.o的可重定位目标文件,再通过链接器链接生成可执行的目标文件. 1.什么是可重定位目标文件        一个扩展 ...

  2. Nat. Biotech. | AI、药物重定位和同行评审

    传统的计算分析和机器学习是否可以弥补在信息泛滥的情况下对药物重定位论文进行同行评审的不足? COVID-19的流行改变了科学和临床成果的分享和传播方式.根据最近的一项分析,平均每周有367篇COVID ...

  3. medRxiv | 基于网络的人类冠状病毒的药物重定位

    随着新型冠状病毒(2019-nCoV)感染肺炎疫情持续发展,武汉.全国各地以及全球的疫情牵动着每一个人的心.2020年2月5日medRxiv发表了研究工作"Network-based Dru ...

  4. Nat. Commun | 用于全基因组药物重定位的系统网络算法

    1. 背景 DNA/RNA测序的最新进展实现了通过"精确"定位个性化疾病模块来快速识别新靶标并重新利用已批准的药物治疗异质性疾病.基因组学时代,药物开发已成为高度集成的系统性问题, ...

  5. 探索“老药新用”最短路径:亚马逊AI Lab开源大规模药物重定位知识图谱DRKG

    本文经授权转载自机器之心(almosthuman2014),未经授权禁止二次转载与摘编. 本文长度为3200字,建议阅读9分钟 本文带你了解亚马逊AI实验室的开源机器学习工具. [ 摘要 ]最近,来自 ...

  6. 共享可写节包含重定位_PE结构学习01-DOS头-NT头-节表头

    什么是PE结构:PE(Portable Execute)文件是Windows下可执行文件的总称,常见的有DLL,EXE,OCX,SYS等,就是只要在Windows下的可执行程序的内部结构都是PE结构, ...

  7. 重定位(搜索KERNEL32.DLL得到API地址)

    1 ;-------------------------------- 2 ;动态加载功能实现 3 ;moriarty 4 ;2012/04/13 5 ;----------------------- ...

  8. Ubuntu16.04中的可重定位目标文件

    最近在看<CSAPP>这本神书,其中看到了第七章链接中的可重定位目标文件,自己动手在ubuntu16.04上试了一试,发现有很多都做了一些改动,在此记录 1.源程序 main.c stat ...

  9. Windows PE 重定位表编程(枚举重定位地址)

    原理之前单独总结过,在这里: http://blog.csdn.net/u013761036/article/details/54051347 下面是枚举重定位信息的代码: // ReLocation ...

最新文章

  1. UI设计师必须了解:2015年十大移动端APP设计主流趋势
  2. Android Lifecycle 生命周期组件详解
  3. 程序员幽默:当代程序员的主要矛盾是什么?
  4. oracle express介绍
  5. android 多语言不起作用,Android本地化语言环境不起作用,所有区域代码都存在问题...
  6. 回归分析检验_回归分析
  7. mysql 参数配置优化
  8. 中希尔排序例题代码_十大经典排序算法最强总结
  9. [CV招聘]中科院空间应用工程与技术中心2019年校园招聘
  10. bzoj 1096 斜率优化DP
  11. html怎么让字体自动变色,html怎么给字体设置颜色
  12. 国奇科技获得融资背后:同名公司存在失信行为,总裁谷建余被限消
  13. windows10 LTSC转换成pro
  14. 基于51单片机的指纹锁设计(附带密码解锁)
  15. 记一次网络故障排除:nat虚拟机不能ping外网 浏览器可以上网
  16. 移动端APP设计规范
  17. Python — 函数进阶(2)
  18. 神秘PE助阵湘鄂情 进军大数据商业模式不明
  19. 最适合初学者的Linux运维学习教程2018版
  20. 黄浩老师cpp平时作业(二)蒙特卡罗阴影面积

热门文章

  1. WP7下巧用MediaElement在雪藏中
  2. 微软职位内部推荐-Software Engineer II
  3. Zabbix-2.2.4,显示中文语言的选项方法
  4. 使用JTextArea示例
  5. nginx 停止服务方法
  6. vim编辑二进制文件
  7. Hibernate5.x Idea搭建
  8. 如何才能写出好的软件设计文档?
  9. ISA2004发布应用程序服务器
  10. 全球75亿美元的网络安全险 会是保险业下一块金矿吗?