LDR: Automatic DLL Relocation in test.exe LDR: Dll AAA.dll base 10000000 relocated due to collision with C:\Work\BBB.dll LDR: Automatic DLL Relocation in test.exe LDR: Dll AAA.dll base 10000000 relocated due to collision with C:\Work\CCC.dll |
appication.exe < filename ... 標準入力(stdin) appication.exe > filename ... 標準出力(stdout) appication.exe >> filename ... 標準出力(stdout)追加オープン appication.exe 2> filename ... 標準エラー出力(stderr) appication.exe 2>> filename ... 標準エラー出力(stderr)追加オープン appication.exe 2>&1 ... 標準エラー出力を標準出力に変更 appication.exe 1>&2 ... 標準出力を標準エラー出力に変更 |
C:\Work>REBASE -b 400000 -R c:\work -G base.txt base.txtの内容 +----------+ |TEST.EXE | |AAA.DLL | |BBB.DLL | |CCC.DLL | +----------+ |
Section contains the following Imports
KERNEL32.dll
D5 GetCurrentThread
14C GetVersion
179 InitializeCriticalSection
4C DeleteCriticalSection
58 EnterCriticalSection
18F LeaveCriticalSection
6B ExitProcess
:
:
(a) バインド前のイメージ
Section contains the following Imports
KERNEL32.dll
7000514E D5 GetCurrentThread
7001412C 14C GetVersion
7001C240 179 InitializeCriticalSection
77F5CAE2 4C DeleteCriticalSection
77F57420 58 EnterCriticalSection
77F574F0 18F LeaveCriticalSection
70019B3C 6B ExitProcess
:
:
(b) バインド後のイメージ
(ロード時に割り当てられるアドレスが
モジュール内に記録されている)
バインド前後のモジュールに対して DUMPBIN.EXE /ALL を実行した結果の
を WINDIFF.EXEで比較すると,その違いを見ることができる
|
|
BOOL BindImage(LPSTR lpszImageName, LPSTR lpszDllPath, LPSTR lpszSymbolPath) |
|
DLLからインポート関数の仮想アドレスを算出する 引数 LPSTR lpszImageName ... バインドを行うモジュールのファイル名 LPSTR lpszDllPath ... DLLのサーチパス LPSTR lpszSymbolPath ... シンボルファイルのサーチパス 戻り値 正常終了 TRUE 異常終了 FALSE |
|
BOOL BindImageEx(DWORD dwFlags, LPSTR lpszImageName, LPSTR lpszDllPath, LPSTR lpszSymbolPath PIMAGEHLP_STATUS_ROUTINE StatusRoutine) |
|
DLLからインポート関数の仮想アドレスを算出する 引数 DWORD dwFlags ... コントロールフラグ BIND_NO_BOUND_IMPORTS ... 新しいインポートアドレステーブルを生成しない BIND_NO_UPDATE ... ファイルのアップデートを行わない BIND_ALL_IMAGES ... このファイルのためのすべての呼び出しをバインドする LPSTR lpszImageName ... バインドを行うモジュールのファイル名 LPSTR lpszDllPath ... DLLのサーチパス LPSTR lpszSymbolPath ... シンボルファイルのサーチパス PIMAGEHLP_STATUS_ROUTINE StatusRoutine ... IMAGEHLP_STATUS_ROUTINE構造体を指すポインタ 戻り値 正常終了 TRUE 異常終了 FALSE |
|
BOOL ReBaseImage(LPSTR lpszCurrentImageName, LPSTR lpszSymbolPath, BOOL fReBase, BOOL fRebaseSysfileOk, BOOL fGoingDown, DWORD dwCheckImageSize, LPDWORD lpdwOldImageSize, LPDWORD lpdwOldImageBase, LPDWORD lpdwNewImageSize, LPDWORD lpdwNewImageBase, DWORD dwTimeStamp) |
|
DLLのロードを行うアドレスを変更する 引数 LPSTR lpszCurrentImageName ... ベースアドレスの変更を行うファイル名 LPSTR lpszSymbolPath ... シンボルファイルへのサーチパス BOOL fReBase ... 変更を行うときにはTRUEを設定する BOOL fRebaseSysfileOk ... システムイメージの変更を行うときTRUEを設定する. システムイメージのベースアドレスは 0x80000000 より 大きい値を設定する必要がある BOOL fGoingDown ... もしイメージが与えられたベースの下で変更するときにはTRUEを設定する DWORD dwCheckImageSize ... イメージの最大サイズを設定する 指定しないときには0を設定する LPDWORD lpdwOldImageSize ... 変更を行う前のイメージサイズ LPDWORD lpdwOldImageBase ... 変更を行う前のイメージベース LPDWORD lpdwNewImageSize ... 新しいイメージサイズ LPDWORD lpdwNewImageBase ... 新しいイメージベース DWORD dwTimeStamp ... 新しいタイムスタンプ(Cランタイムのtime関数で取得する) 戻り値 正常終了 TRUE 異常終了 FALSE |
| CheckSumMappedFile | イメージファイルのチェックサムを計算する |
| MapFileAndCheckSumA | イメージファイルのチェックサムを計算する(ANSI版) |
| MapFileAndCheckSumW | イメージファイルのチェックサムを計算する(UINCODE版) |
| RemovePrivateCvSymbolic | CodeViewデバッグ情報からパブリック情報を取り除く |
| RemoveRelocations | リロケーション情報をイメージファイルから取り除く |
| SplitSymbols | シンボル情報をイメージから取り除く |
| UpdateDebugInfoFile | 指定された情報でDBGファイルの情報を更新する |
| UpdateDebugInfoFileEx | 指定された情報でDBGファイルの情報を更新する |
|
BOOL (__stdcall *PIMAGEHLP_STATUS_ROUTINE)( IMAGEHLP_STATUS_REASON Reason, LPSTR lpszImageName, LPSTR lpszDllName, ULONG uVa, ULONG uParameter) |
|
BindImageEx の実行ステータスを取得する 引数 IMAGEHLP_STATUS_REASON Reason LPSTR lpszImageName ... イメージファイル名 LPSTR lpszDllName ... DLL名 ULONG uVa ... 仮想アドレス ULONG uParameter ... パラメータ 戻り値 正常終了 TRUE 異常終了 FALSE |
typedef enum _IMAGEHLP_STATUS_REASON {
BindOutOfMemory, メモリ不足
BindRvaToVaFailed, RVAからVAに変換できなかった
BindNoRoomInImage, イメージファイルが読み込めなかった
BindImportModuleFailed, インポートモジュールをバインドできなかった
BindImportProcedureFailed, インポートプロシジャをバインドできなかった
BindImportModule, インポートモジュールをバインドした
BindImportProcedure, インポートプロシジャをバインドした
BindForwarder, ???
BindForwarderNOT, ???
BindImageModified, イメージを修正した
BindExpandFileHeaders, 拡張ファイルヘッダをバインドした
BindImageComplete, イメージのバインドが終了した
BindMismatchedSymbols, シンボルが一致しなかった
BindSymbolsNotUpdated シンボルはアップデートされなかった
} IMAGEHLP_STATUS_REASON;
|
----------------------------------------- イメージファイル名: wboot32.exe DLLの検索パス: C:\WINDOWS\SYSTEM シンボルファイルパス: D:\WORK\MSC\imagehlp\src ----------------------------------------- BindImageEx: 処理は正常に終了しました. |