使用rebase进行dll基地址重定位

今天同事做了《Windows核心编程》的读书报告,其中有一个建议如下:

假设有3个模块,一个user.exe,另外两个是A.dll,B.dll。
在编译链接各个模块时,我利用VS默认的base address,这样user.exe的默认基地址是0x00400000h,A或B的基地址是0x10000000h。这样,当加载器加载User.exe(它同时隐式链接A,B)。这样,A,B就会有一个被迫改变默认的基地址;从而导致映像文件里的机器代码指令(包含的硬编码地址)与加载后的不一样,从而需要调整(效率就会降低)。
我知道在vs中编译链接的时候可以利用 set baseaddress 修改。但是,假设我的可执行模块需要更多的dll时,我就希望利用工具(rebase)来修改。M i c r o s o f t在销售Wi n d o w s操作系统之前,在操作系统提供的所有文件上运行了R e b a s e程序,因此,如果将它们映射到单个地址空间中,所有的操作系统模块都不会重叠。

 

这里我们采用Rebase来进行基地址重定位

Rebase.exe -b 0x400000 myjiapp.exe A.dll  B.dll

 

我们可以使用dumpbin来进行查看,

   dumpbin /headers A.dll

 

 我们在如下位置可以看到新的基地址,

 

optional header values

     ..........

      10000000 imge base <10000000 to 1047cfff> (这个是没有进行重定位的)

 

 

      007E 0000 imge base <007E 0000 to 1047cfff> (这个是没有进行重定位的)

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值