
誰でも違いを知っていますか?
Portable Executables で遊びたい場合は、仕様書のコピーを入手するしか方法がありません。
しばらく経ちましたが、メモリが正しく機能する場合: IT と IAT は同じですが、IAT はインポートの解決中に PE ローダーによって埋められますが、私の言葉を信じないでください。仕様を確認してください :)
仕様をざっと見て、少し記憶をリフレッシュしました。インポート テーブルはマスター構造であり、インポート元の DLL ごとに 1 つのエントリがあります。各エントリには、とりわけ、インポート ルックアップ テーブル( ILT ) とインポート アドレス テーブル( IAT ) ポインターが含まれています (これらは以前は および と呼ばれOriginalFirstThunkていましたFirstThunk)。ILT テーブルと IAT テーブルはディスク上では同一ですが、実行時に IAT はインポートされた関数のメモリ アドレスで埋められます。
非標準のEXEを処理できるようにしたい場合、PEヘッダーのIATフィールドは、コードの開始/サイズとデータポインターに依存できないのと同じように、おそらく100%依存することはできません。IAT ヘッダー フィールドを無視して、代わりに IT を解析することをお勧めします。また、IT を解析するとき、一部の実行可能ファイルでは ILT が欠落し、IAT しかありません。古い borland (iirc) リンカは ILT を生成しないことで有名でした。
IMAGE_IMPORT_DESCRIPTOR。IMAGE_THUNK_DATA。