dll的重定位

dll的建议装载地址在编译的时候就已经确定了,多个dll加载时建议装入地址会冲突,windows的装载器会根据pe文件的重定位表将需要修正的地址进行修正。

修正时需要三个值  1.实际的装载地址(windows自己知道了windows装载器加载的当然知道了^_^)2.建议的装载地址编译器已经确定了(编译器知道并写在了pe文件的头部)


3.哪些需要修正了(写在pe文件头了)

重定位表中实际上保存了大量的需要进行修正的代码地址(不同的dll对应不同的地址)。windows装载器通过分析pe文件头对代码进行修正


比如某个调用  messagebox()   地址是004010cc(不一定啊举个例子)   但是有个dll的调用函数也是用了这个线性地址(就是说这个dll与之前的dll的线性地址有冲突啦^_^),当然是不可以的,所以装载器就通过pe文件的重定位表找到这段代码,以及对应的dll信息(这个函数对应的dll)将这个dll装载到别的不冲突的线性地址去,然后修正所有的使用了这个dll的导出函数的代码。修正值=  实际装载地址—建议装在地址  ptr dword[xxxxxx+修正值]



罗云斌的书中又讲到很详细


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值