10

プログラムと共にインストールする DLL ファイルのグループをリベースする必要があります。これは 32 ビット プログラムであり、現在アドレス空間が断片化しすぎているためです。また、一部の DLL とのベース アドレスの競合が原因で、ローダーがそれらをリベースできるように、コールド ブート時に DLL 全体が RAM にデマンド ページされるという問題もあります。一部の DLL は、コンパイル済みのものです。その他はサードパーティ製です。

私がやりたいことは、DLL のグループがメモリの連続したブロックを占有するように、DLL の特定のセットをツールにリベースさせることです。このツールは、セットアップ プログラムのコンパイルの直前に実行され、リベースされた DLL がアプリケーションのプライベート ディレクトリにインストールされます。

私が理解していることから、Windows SDK に含まれている REBASE.EXE ツールはまさにそれを実行/実行しました。いくつかの DLL を与えると、それらがリベースされます。

残念ながら... Windows 8 Consumer Preview 用の Windows ソフトウェア開発キット (SDK)は次のように述べています。

ツールWindows SDK からは、多くの古いツールまたは非推奨のツールが削除されました。次のツールが削除されました。

<中略> ReBase.exe

今何?明らかに時代遅れで、次のバージョンの Windows で廃止されるツールを使い始めたくありません。私がこれを正しく読んでいると仮定すると、ReBase.exe を使用する代わりになるものは何ですか? サードパーティ ツールを導入したり、独自のリベース コードを記述したりするのではなく、Windows SDK や Visual Studio に付属のツールの使用に制限したいと考えています。

または、この問題全体に間違った方法でアプローチしていますか?

4

3 に答える 3

11

editbin.exeVS2010 に付属しており、/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

于 2012-04-11T22:01:14.823 に答える
3

「REBASE.EXE -b 0x58000000 -e 0x10000 -c coffbase.txt *.dll」を一連のファイルに対して使用することは言うまでもありません。単に COFFBASE ファイルを生成するためです。
言い換えれば、ファイルを今実際にリベースするつもりだからではなく、正確な COFFBASE.TXT が必要なため、ファイル
がビルドされるたびに特定の競合しないベースアドレスで/既に/ビルドされるようにするためです。

于 2012-10-18T21:23:11.070 に答える
3

Rebase.exe が廃止された理由は、以前ほど有用ではないためです。Windows Vista 以降、Microsoft はアドレス スペース レイアウトのランダム化を実装しました。これは、システム DLL をロードするたびに移動し、オプションでユーザー DLL も移動します。

大規模な連続したアドレス空間を生成するためにリベースを期待している場合は、がっかりするでしょう。

于 2012-04-11T22:00:19.283 に答える