2020/11/18 更新
ファイルの公開場所を Bitbucket 上に移動しました。
i.j Shell Property Sheets Export/Import ver.1.01k23 Copyright (C) 1999 i.j, 2004-2020 K.Takata 1.概要 i.j 氏の i.j Shell Property Sheets Export/Import 32 (ijexp32) (*1) の改造版です。 エクスプローラのプロパティにて、実行ファイルの PE 構造、インポート とエクスポートを表示します。 オリジナル版の機能に加え、Delphi などでコンパイルされたプログラム のインポート情報の表示や、64bit 実行ファイル (x64, IA64, ARM64) の情 報表示に対応しています。 (*1) http://www.vector.co.jp/soft/win95/util/se111901.html 2.動作環境 Windows 7/8/10 など 要 MFC42u.DLL, MSVCRT.DLL, MSVCP60.DLL 3.インストール インストーラを実行してインストールしてください。すべてのユーザー向 けにインストールするには管理者権限が必要です。 ver.1.01k19 以前のバージョンをインストールしていた場合は、最初に旧 バージョンのアンインストールを行うか聞かれますので、「はい」を選択し てください。 4.アンインストール Win10 の場合、「Windows の設定」→「アプリ」で本ソフトウェアを選択 し、アンインストールしてください。 5.レジストリ Win10 の場合、以下のレジストリが追加されます。 上記の "アンインストール" で、全ての変更は削除されるはずです。 +- HKEY_CLASSES_ROOT | +- CLSID | | +- {00000001-23D0-0001-8000-004026419740} ←追加 | | +- 以下全部 | +- * | | +- shellex | | +- PropertySheetHandlers | | +- {00000001-23D0-0001-8000-004026419740} ←追加 | +- WOW6432Node | +- CLSID | +- {00000001-23D0-0001-8000-004026419740} ←追加 (*2) | +- 以下全部 | +- HKEY_LOCAL_MACHINE (*3) +- SOFTWARE +- ijexp ←追加 (インストーラ設定情報) | +- Microsoft +- Windows +- CurrentVersion +- Uninstall +- ijexp ←追加 (アンインストール情報) (*2) 64bit 版 Windows にインストールした場合。 (*3) 自分専用にインストールした場合は HKEY_CURRENT_USER。 6.使用法 オリジナル版の ijexp32.txt を参照してください。 7.設定 一部の動作をレジストリで設定することができます。 同梱の ijexp_sample_settings.reg を書き換えて、ダブルクリックしてレジストリ に読み込ませることで設定変更ができます。(現バージョンでは、設定変更 用の UI は用意していません。) インストール先の ijexp.ini にはデフォルトの設定が書き込まれていま す。ijexp.ini よりもレジストリの設定が優先されます。 %APPDATA%\ijexp\ijexp.ini を用意することでも設定を変更することがで きます。設定の優先順位は以下のようになっています。(上が優先度高) 1. レジストリ (HKCU\Software\ijexp) 2. %APPDATA%\ijexp\ijexp.ini 3. インストール先の ijexp.ini (%ProgramFiles%\ijexp\ijexp.ini) 7.1. 対応拡張子の設定 ExeHdr,Export,Import タブを表示させる拡張子をレジストリまたは ijexp.ini で設定することができます。ijexp_sample_settings.reg や ijexp.ini の "exts" の値を参照してください。 7.2. c++filt の設定 MinGW あるいは Cygwin の c++filt.exe があれば、GCC のシンボルをデ コード(デマングル)して表示することができるようになります。 c++filt.exe の場所は、レジストリまたは ijexp.ini で設定可能です。 ijexp_sample_settings.reg や ijexp.ini の "c++filt" の値を参照してく ださい。 デフォルトでは以下の順で検索を行い、最初に見つかったものを使用しま す。 C:\msys64\mingw64\bin\c++filt.exe C:\msys32\mingw32\bin\c++filt.exe C:\cygwin64\bin\c++filt.exe C:\cygwin\bin\c++filt.exe C:\TDM-GCC-64\bin\c++filt.exe C:\MinGW\bin\c++filt.exe 8.エクスポート名リスト オリジナル版と同様に、デバッグ版 mfc??d.dll のリストは添付していま せん。必要な方は各自で作成して下さい。必要なファイルは以下の場所にあ ります。 VS 6.0: <VS のディレクトリ>\VC98\mfc\src\intel\mfc*.def VS.NET 2002/2003: <VS.NET のディレクトリ>\Vc7\atlmfc\src\intel\mfc*.def VS 2005/2008: <VS のディレクトリ>\Vc\atlmfc\src\intel\mfc*.def Perl を使う場合は、例えば以下のようにすると良いでしょう。 > perl -ne "if(/\s+;?([^\s]+)\s+\@\s*(\d+)/){printf \"%04x, %s\n\", $2, $1;}" < mfc42d.def > mfc42d.exp def ファイルの代わりにインポートライブラリから作成することも可能で す。インポートライブラリは以下の場所にあります。 VS 2013/2015: <VS のディレクトリ>\VC\atlmfc\lib\ VS 2017 Community: %ProgramFiles(x86)%\Microsoft Visual Studio\2017\Community\ VC\Tools\MSVC\<version>\atlmfc\lib\<arch>\ > dumpbin /exports mfc42d.lib | perl -ne "if(/^ +(\d+) {4}(\S+)/){printf \"%04x, %s\n\", $1, $2}" | sort > mfc42d!x64.exp 9.ソースファイル 本ソフトのソースは、GitHub から入手可能です。 https://github.com/k-takata/ijexp32 ijexp32.dsw, ijexp32.dsp は VC6 のプロジェクトファイルです。オリジ ナル版とは異なり、VC5 ではコンパイルできなくなっています。 ijexp32.sln, ijexp32.vcproj は、VS.NET 2003 のプロジェクトファイル です。 Makefile, sources は Windows Driver Kit (WDK) 用のメイクファイルで す。Build Environment を起動し、build コマンドを実行すると、DLL がビ ルドされます。 なお、現バージョンには以下の既知のバグがあります。 ・解析できないエクスポート名形式がある。(analyzer.cpp) 例: エクスポート名: ?_R2@?BN@???$_Fabs@N@std@@YANABV?$complex@N@1@PAH@Z@4NB undname による解析結果: "double const `double __cdecl std::_Fabs<double>(class std::complex<double> const &,int *)'::`29'::_R2" 10.更新履歴 2004/12/19 ver.1.01k1 ・K.Takata による最初の公開バージョン。 ・コンパイラを VC6 SP6 に変更。 ・Delphi 製プログラムのインポート情報を表示できるように変更。 ・mfc42.exp を最新の mfc42.dll に対応させたものに変更。 ・mfc70.exp, mfc71.exp を追加。 2005/05/09 ver.1.01k2 ・ws2_32.exp を追加。(WinSock2 用) ・kernel32.exp を追加。(Win9x の非公開 API) ・oleaut32.exp を更新。 ・一部の実行ファイルで落ちるのを修正。 2005/06/20 ver.1.01k3 (非公開) ・sys ファイルでも、ヘッダ情報とインポート情報を表示するように変 更。 2008/10/25 ver.1.01k4 ・x64(AMD64), IA64 実行ファイルの情報表示に対応。 ・エクスポート名の解析で、VC++ 7.0 以降の wchar_t に対応。 ・エクスポート名の解析で、シンボルの間接参照部分を一部修正。 ・エクスポート名の解析で、数値指定のテンプレートに対応。 ・Unicode 版の実行ファイルを追加。(ANSI 版と Unicode 版は、イン ストール時に OS に応じて自動選択される。) ・情報をファイルに保存する際、カレントディレクトリを移動しないよ うに変更。(移動すると一部のファイラで不都合だったため。) ・情報をファイルに保存する際、上書き確認を行うように変更。 ・vcbungle.txt を更新。(wchar_t, __ptr64, __pascal など) ・x64 ビルドできるようにソースを修正。(動作は未確認) ・mfc80.exp を追加。 ・mfc??u.exp を追加。(Unicode 版 MFC DLL 用リスト) ・必要ファイルを一式まとめて配布するように変更。(配布ファイルの サイズが大きくなってしまったため、アーカイブ形式を .7z に変更) ・ijdll32.exp, ijgdi32.exp をインストール対象から除外。 2008/10/26 ver.1.01k5 ・エクスポート名の解析を改良。(特殊メンバー名の追加、引数の間接 参照の修正。) ・vcbungle.txt を更新。 ・WinXP 以降ではファイルプロパティ画面が大きくなったのに合わせて、 表示領域を拡大。 2008/11/03 ver.1.01k6 ・エクスポート名の解析を改良。 - 関数へのポインタを返す関数の修正 - 引数のない関数の修正 - 引数の間接参照の修正 - __int64 なども間接参照の対象 - 関数の戻り値は間接参照の対象外 - シンボルの間接参照の修正(テンプレート関係) ・vcbungle.txt を更新。 2008/11/05 ver.1.01k7 ・エクスポート名の解析を改良。 - 引数の間接参照の修正 - テンプレート引数の負数指定に対応 - __int8, __int16, __int32 に仮対応(VC++ では未使用?) ・LARGE_ADDRESS_AWARE フラグの表示に対応。 ・Windows CE 実行形式の表示に一部対応。 ・一部のボタン類にアクセスキーを設定。 ・Copy ボタンを新設。(情報をクリップボードにコピー) 2008/11/09 ver.1.01k8 ・ディレクトリ情報の表示を修正。 ・エクスポート名の解析を改良。 - テンプレート引数の実数指定に仮対応(VC++ では未使用?) - __int128 に仮対応(VC++ では未使用?) - const ポインタ、volatile ポインタ、関数ポインタへのポイン タの解析を修正 ・エクスポートしている関数と名前の数を表示するように改良。 ・全てのボタンにアクセスキーを設定。 ・vcbungle.txt を更新。 2008/11/09 ver.1.01k9 ・ヘッダ情報の表示を修正。 2008/11/12 ver.1.01k10 ・Unicode 版実行ファイルで、インポート名が正しく表示されない場合 があったのを修正。 ・WDK で 32bit 実行ファイルもビルドできるようにするため sources ファイルを修正。 ・カレントユーザーのみにインストールするための情報ファイル (ijexp32_user.inf) を実験的に添付。Admin 権限が無くてもインス トールできるかも。(アンインストール時、エラーメッセージが出る 場合あり。) 2008/11/29 ver.1.01k11 ・x64 版 Vista に対応。使用するアプリに応じて、64bit 版と 32bit 版の両方をインストールする必要あり。(なお、実験版の ijexp32_user.inf を使ったインストールでは、64bit 版と 32bit 版 の同時インストールは不可。) ・ijexp32_user.inf によるインストール先を %APPDATA% から %LOCAL_APPDATA% に変更。(ver.1.01k10 の ijexp32_user.inf を使 ってインストールした場合は、一度アンインストールが必要。) 2008/12/01 ver.1.01k11a ・1.01k3 以前をインストール後、1.01k4 以降を上書きインストールし、 その後アンインストールした場合、一部のファイルがアンインストー ルされずに残ってしまうのを修正。(.inf ファイルの修正のみ。) 2008/12/06 ver.1.01k12 ・WinXP 以降ではビジュアルスタイルが適用されるように修正。 2009/05/09 ver.1.01k13 ・MS-DOS ヘッダのエラーチェックを緩和。(実行可能なファイルをは じいてしまう場合があったため) ・エクスポート名の解析を修正。 - <型> * const & などの解析を修正。 ・バッファオーバーフローの可能性があった部分を修正。 ・アンインストール時にレジストリにゴミが残るのを修正。 ・ファイルのプロパティを表示し、ijexp32 が追加したタブを選択しな いままプロパティ画面を閉じたとき、メモリリークするのを修正。 ・インポート/エクスポートセクションの有無に応じて、それぞれのタ ブを表示するように変更。 ・タブを追加するファイル種別を設定ファイル (ijexp32.ini) で変更 できるように変更。 2009/07/10 ver.1.01k14 ・64bit 実行ファイルを解析する際、x64 用の .exp がある場合は、そ れを読み込むように変更。(ファイル名: 〜!x64.exp) バグ:IA64 実行ファイルでも、x64 用 .exp を読み込んでしまう。 ・mfc42.exp, mfc42u.exp を Vista 付属のバージョンに対応させたも のに変更。 ・mfc*!x64.exp を追加。 ・対応拡張子をいくつか追加。(ijexp32.ini) 2012/06/08 ver.1.01k15 ・Export, Import リストで、コンテキストメニューから、選択してい る行のみをクリップボードにコピーできるようにした。 ・ソースファイルから ijexp32.clw を削除。 2013/06/29 ver.1.01k16 ・c++filt.exe を利用して、GCC のシンボルをデマングルして表示でき るようにした。 ・レジストリで設定を変更できるようにした。 ・対応拡張子をいくつか追加。(ijexp32.ini) ・ExeHdr タブで、生の値も表示するようにした。 2013/07/03 ver.1.01k17 ・Export, Import リストで、ソートして表示できるようにした。 ・ソースコード上の細かい修正。 2017/01/18 ver.1.01k18 ・d2d1.exp を追加。 ・c++filt.exe のパスを複数指定できるように修正。 ・ARM64 等、いくつかのアーキテクチャに対応。 ・Win9x 対応を削除。 ・High DPI 環境での表示を改善。 ・vcbungle.txt を更新。 2017/12/28 ver.1.01k19 ・c++filt 利用時の処理速度改善。 ・mfc120*.exp, mfc140*.exp を追加。 ・DllCharacteristics の新規フラグにいくつか対応。 ・d2d1.exp を更新。 2018/01/05 ver.1.01k20 ・.inf ファイルによるインストールを廃止し、インストーラによるイ ンストールに変更。 ・ソースコードの同梱を取りやめ。 ・64bit 版の DLL ファイル名を ijexp32.dll から ijexp64.dll に変 更。 ・設定の読み込み場所・順序を変更。(レジストリ位置、ini ファイル 名。) ・1.01k9 以降、Symbols および LineNums が strip されているかどう かの表示が逆になっていたのを修正。 ・DllCharacteristics のフラグを LSB ではなく MSB から先に表示す るように変更。 2018/02/17 ver.1.01k21 ・インストーラを HiDPI に対応。 ・自分専用にインストールできるように変更。 ・インストーラのコマンドライン引数でインストールディレクトリを指 定できなかったのを修正。(/D=path) ・インストーラで、不要なエラーメッセージが表示される場合があった のを修正。 ・1.01k20 で設定の読み込み順序が意図通りになっていなかったのを修 正。 2018/09/08 ver.1.01k22 ・ExpHdr シートで、VC のチェックを外した場合に、シンボルが転送さ れていれば、それを表示するようにした。これに伴い、エクスポート 情報をファイルに保存、あるいはクリップボードにコピーした際のフ ォーマットを変更。 ・上記の新フォーマットの *.exp の読み込みに対応。 2020/11/18 ver.1.01k23 ・shlwapi.dll でシンボルの転送先が正しく表示されていなかったのを 修正。 ・shlwapi.exp を Win10 20H2 の最新版に基づいて更新。 11.注意事項、その他 ・この改造版に固有のことをオリジナル版の作者に質問することは決してし ないでください。 ・ライセンスはオリジナル版に従うものとします。 改造版作者 : K.Takata(高田 謙) URL : http://k-takata.o.oo7.jp/ : https://github.com/k-takata/ijexp32