windows - REBASE.EXE 的替代品是什么?

标签 windows visual-c++ dll rebase winapi

我需要重新设置与我的程序一起安装的一组 DLL 文件的基址,因为它是一个 32 位程序,地址空间现在太零散了。此外,由于与某些 DLL 的基地址冲突,整个 DLL 在冷启动时被按需分页到 RAM 中,以便加载程序可以重新设置它们的基址。有些 DLL 是我们编译的;其他来自第三方。

我想做的是让一个工具对一组给定的 DLL 进行 rebase ,以便这组 DLL 占据一个连续的内存块。然后,该工具将在编译安装程序之前运行,重新设置基址的 DLL 将安装在应用程序的私有(private)目录中。

据我所知,Windows SDK 中包含的 REBASE.EXE 工具正是这样做的。给它一些 DLL,它会 rebase 它们。

不幸的是……Windows Software Development Kit (SDK) for Windows 8 Consumer Preview说:

Tools Many obsolete or deprecated tools have been removed from the Windows SDK. The following tools have been removed:

<snip> ReBase.exe

现在怎么办?我不想开始使用显然已经过时并且将在下一版本的 Windows 中消失的工具。假设我没有看错,那么使用 ReBase.exe 的替代品是什么?我想限制自己使用 Windows SDK 和/或 Visual Studio 附带的工具,而不是引入第 3 方工具和/或编写我自己的 rebase 代码。

或者,我是不是以错误的方式处理了整个问题?

最佳答案

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:#[.#]

正如 Mark 指出的那样,您需要关闭 ASLR,您可以使用 /DYNAMICBASE:no

关于windows - REBASE.EXE 的替代品是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10114492/

相关文章:

C++将变量重新定义为常量

winapi - ASLR 会导致地址与 DLL 注入(inject)的冲突吗?

dll - 用dmd编译D2语言时如何从DLL中导出变量?

windows - 默默使用Microsoft XPS Document Writer打印机制作XPS

javascript - 打印时点击如何打开另一页?

c++ - 错误 C244 '{' : missing function header (old-style formal list?) Visual C++

javascript - Unity3d : How to use dll from Javascript?

windows - 使用 PowerShell 脚本为数百名用户设置执行策略

c++ - 如何以编程方式设置系统IP

c++ - DirectX:如何更改按钮对象的字体大小?