什么是REBASE.EXE的替代品?

Jam*_*ton 10 windows dll winapi rebase visual-c++

我需要重新设置我用我的程序安装的DLL文件组,因为它是一个32位程序,地址空间现在太碎片了.还有一个问题是,由于基地址与某些DLL冲突,整个DLL在冷启动时被请求分页到RAM中,因此加载器可以对它们进行重新绑定.有些DLL是我们编译过的; 其他人来自第三方.

我想要做的是有一个工具rebase一组给定的DLL,以便DLL组占用一个连续的内存块.然后,在编译安装程序之前运行此工具,并将重新定义的DLL安装在应用程序的专用目录中.

据我所知,Windows SDK附带的REBASE.EXE工具确实做到了这一点.给它一些DLL,然后重新定义它们.

不幸的是... Windows 8 Consumer Preview的Windows软件开发工具包(SDK)说:

工具许多已过时或已弃用的工具已从Windows SDK中删除.已删除以下工具:

<snip> ReBase.exe

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

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

小智 11

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:#[.#]
Run Code Online (Sandbox Code Playgroud)

正如马克指出你要关闭ASLR,你可以通过使用来做 /DYNAMICBASE:no

  • EDITBIN/REBASE选项很好地解决了这个问题.并且MSDN显示它在Visual Studio 11中有EDITBIN的文档,因此我不认为它们很快就会删除它.很明显他们为什么弃用并从Windows 8 SDK中删除REBASE.EXE:它复制了EDITBIN的功能!我不确定为什么其他人认为变革的需要是完全过时的...... - 事实并非如此.太糟糕了很多在线的重新定位教程仍然参考REBASE.EXE ... (2认同)
  • 太糟糕的editbin不会生成像rebase.exe这样的详细输出 (2认同)