1

WindowsのPE実行形式の「インポートアドレステーブル」が「dllごと」か「exeごと」か知っている人はいますか?

4

2 に答える 2

2

どのPEにもインポートアドレステーブルを含めることができるため、DLLとEXEの両方にインポートアドレステーブルを含めることができます。どちらも他のバイナリに依存関係(インポート)を持つ可能性があるため、これは理にかなっています。動的ロード(LoadLibrary/ GetProcAddress)を実行していない限り、別のモジュールを呼び出すときにインポートアドレステーブルがあります。

dumpbinVisual Studioでユーティリティを使用して、PEのインポートを確認できます。

user32.dllの例:

C:\ Windows \ System32> dumpbin / imports user32.dll

Microsoft(R)COFF / PE Dumperバージョン10.00.30319.01Copyright(C)MicrosoftCorporation。全著作権所有。

ファイルuser32.dllのダンプ

ファイルの種類:DLL

セクションには、次のインポートが含まれています。

ntdll.dll
          7DC60000 Import Address Table
          7DCCACEC Import Name Table
                 0 time date stamp
                 0 Index of first forwarder reference

              15A NtOpenKey
              7A9 wcscat_s
              7AD wcscpy_s
                  ...

...そしてnotepad.exeの場合...

C:\ Windows \ System32> dumpbin / imports notepad.exe

Microsoft(R)COFF / PE Dumperバージョン10.00.30319.01Copyright(C)MicrosoftCorporation。全著作権所有。

ファイルnotepad.exeのダンプ

ファイルタイプ:実行可能イメージ

セクションには、次のインポートが含まれています。

ADVAPI32.dll
           1001000 Import Address Table
           100A234 Import Name Table
          FFFFFFFF time date stamp
          FFFFFFFF Index of first forwarder reference

  77C71C82    27E RegSetValueExW
  77C7BCD5    26E RegQueryValueExW
  77C7BED4    230 RegCloseKey
                  ...
于 2010-09-27T03:50:16.200 に答える
0

簡潔な答え:

IAT (Import Address Table) は、PE ファイル (dll および exe) ごとです。

長い答え:

ローダーが exe ファイルをロードすると、このセクションに IMAGE_SCN_MEM_DISCARDABLE が設定されていない限り、PE の各セクションがプロセス メモリにコピーされます。IAT は .idata セクション ( msdn ) にあります。

PE ファイルの .idata セクションには、ローダーがターゲット関数のアドレスを特定し、それらを実行可能イメージにパッチするために必要な情報が含まれています。.idata セクション (または、私が好むようにインポート テーブル) ...

IMAGE_SCN_MEM_DISCARDABLE が idata セクションに設定されていません。したがって、idata セクションがメモリにコピーされ、exe と dll の両方にこのセクションがあり、IAT が PE ごとであることを意味します。

理解に役立つ場合は、ここに簡単なdllローダーを書きました。

于 2017-11-08T23:02:28.587 に答える