我有一个需要衍合组的,我安装我的程序的DLL文件,因为它是一个32位程序和地址空间,现在是太零碎。 还有就是DLL文件是按需分页到内存上冷启动,这样加载器可以变基他们,由于一些DLL的基地址冲突的全部问题。 某些DLL是那些我们已经编制; 其他来自第三方。
我想这样做是有一个工具变基一组给定的DLL使集团的DLL占据一个连续的内存块。 该工具将被运行之前,为了安装程序的编译和重订基期的DLL将被安装在应用程序的私有目录。
据我了解,在REBASE.EXE工具包含在Windows SDK中/正是做到了。 给它一些DLL文件,并且它变基他们。
不幸的是...... Windows软件开发工具包(SDK),为Windows 8消费者预览版说:
工具很多陈旧或过时的工具已经从Windows SDK中删除。 以下工具已被删除:
<剪断> ReBase.exe
现在怎么办? 我不想开始使用工具,显然是过时的,不会消失在Windows的下一个版本。 假设我读这个权利,有什么替代品使用ReBase.exe? 我想自己限制使用与Windows SDK和/或Visual Studio工具,而不是引入第三方工具和/或写我自己的底垫的代码。
或者,我在处理这个问题的全部错误的方式?
editbin.exe
自带VS2010和有/ REBASE选项。
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC>editbin
Microsoft (R) COFF/PE Editor Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.
usage: EDITBIN [options] [files]
options:
/ALLOWBIND[:NO]
/ALLOWISOLATION[:NO]
/BIND[:PATH=path]
/DYNAMICBASE[:NO]
/ERRORREPORT:{NONE|PROMPT|QUEUE|SEND}
/HEAP:reserve[,commit]
/LARGEADDRESSAWARE[:NO]
/NOLOGO
/NXCOMPAT[:NO]
/REBASE[:[BASE=address][,BASEFILE][,DOWN]]
/RELEASE
/SECTION:name[=newname][,[[!]{CDEIKOMPRSUW}][A{1248PTSX}]]
/STACK:reserve[,commit]
/SUBSYSTEM:{BOOT_APPLICATION|CONSOLE|EFI_APPLICATION|
EFI_BOOT_SERVICE_DRIVER|EFI_ROM|EFI_RUNTIME_DRIVER|
NATIVE|POSIX|WINDOWS|WINDOWSCE}[,#[.##]]
/SWAPRUN:{[!]CD|[!]NET}
/TSAWARE[:NO]
/VERSION:#[.#]
正如马克指出,你要关闭ASLR,您可以通过使用做/DYNAMICBASE:no
Rebase.exe已被弃用的原因是,它并不像它曾经是那么有用。 从Windows Vista开始,微软实施地址空间布局随机化其移动每次加载它们,以及可选的用户的DLL以及阵子系统DLL。
如果你指望垫底产生大量连续的地址空间,你会失望。
且不说对一组文件中使用“REBASE.EXE -b 0x58000000 -e 0x10000的-c coffbase.txt的* .dll”,只需生成COFFBASE文件。
换句话说,不是因为你打算现在居然变基文件,而是因为你想要一个准确的COFFBASE.TXT,
因此,他们将/已经/与特定和非冲突的基址每次他们建立的时间建成。