Kanasan.JS JavaScript 第5版読書会#7に参加しました
先日の日曜日、4月12日(日)に開催された「Kanasan.JS JavaScript 第5版読書会#7」に参加しました。
- Kanasan.JS JavaScript 第5版読書会#7
- 日時: 2009年04月12日(日) 13:30〜18:30
- 場所: 蛍池公民館 練習室
- 参考: Kanasan.JS JavaScript第5版読書会#7& 懇親会
今回の一番の収穫は「IETester」でしょうか。浅学ゆえ、このソフトウェアの存在を知りませんでした。こんな便利な物があったとは!
IETesterについて調べてみる
IETesterの概要やインストール方法などは、豊富に情報があるので省くとして、気になる仕組みを簡単に調べてみました。果たしてどのようにして、複数バージョンのInternet Explorerの結果を表現するのか。
まずは、インストール先のディレクトリを覗いてみました。デフォルトのままなので「C:\Program Files\Core Services\IETester」。
> dir /w [.] [..] 5hdoclc.dll 5HDOCVW.DLL 5ininet.dll 5ISPEX.DLL 5NETCPLC.DLL 5RLMON.DLL 5ROWSELC.DLL 5ROWSEUI.DLL 5SCRIPT.DLL 5SHTML.DLL 5SHTMLED.DLL 5SHTMLER.DLL 5XTMSFT.DLL 5XTRANS.DLL 6bscript.dll 6hdoclc.dll 6hdocvw.dll 6ininet.dll 6ispex.dll 6psp2res.dll 6rlmon.dll 6ROWSELC.DLL 6rowseui.dll 6script.dll 6shtml.dll 6shtmled.dll 6xtmsft.dll 6xtrans.dll 7bscript.dll 7eframe.dll 7eframe.dll.mui 7ertutil.dll 7eui.dll 7eui.dll.mui 7hdocvw.dll 7hlwapi.dll 7ininet.dll 7ininet.dll.mui 7netcpl.cpl.mui 7nseng.dll 7nseng.dll.mui 7ormaliz.dll 7rlmon.dll 7rlmon.dll.mui 7rowseui.dll 7script.dll 7shtml.dll 7shtml.dll.mui 7shtmled.dll 7shtmled.dll.mui 7shtmler.dll 7shtmler.dll.mui 7xtmsft.dll 7xtrans.dll 8bscript.dll 8eframe.dll 8ertutil.dll 8eui.dll 8eui.dll.mui 8hdocvw.dll 8hlwapi.dll 8ininet.dll 8ininet.dll.mui 8netcpl.cpl.mui 8rlmon.dll 8rlmon.dll.mui 8script.dll 8shtml.dll 8shtml.dll.mui 8shtmled.dll 8shtmler.dll 8shtmler.dll.mui 8srating.dll 8srating.dll.mui 8xtmsft.dll 8xtrans.dll IETester.exe [Languages] Uninstall.exe
ん?なんだか見た事があるようなファイル名・・・。
次に、Internet Explorer 7(iexplore.exe)とIETester(IETester.exe)のそれぞれのプロセスにVisualStudio 2005のデバッガでアタッチし、ロードされているモジュールの一覧を取得。
・・・思った通り、IETesterに含まれているDLLファイル群は、IE関連のDLLファイル一式でした。例えば、Internet Explorer 7の場合、下記のような箇所にあるファイルが、1文字目をバージョン番号に変更されてIETesterに含まれています。(実際には英語版が含まれているので、ja-JPではありませんが)
7bscript.dll | C:\WINDOWS\system32\vbscript.dll |
7eframe.dll | C:\WINDOWS\system32\ieframe.dll |
7eframe.dll.mui | C:\WINDOWS\system32\ieframe.dll.mui |
7ertutil.dll | C:\WINDOWS\system32\iertutil.dll |
7eui.dll | C:\WINDOWS\system32\ieui.dll |
7eui.dll.mui | C:\WINDOWS\system32\ja-JP\ieui.dll.mui |
7hdocvw.dll | C:\WINDOWS\system32\shdocvw.dll |
7hlwapi.dll | C:\WINDOWS\system32\shlwapi.dll |
7ininet.dll | C:\WINDOWS\system32\wininet.dll |
7ininet.dll.mui | C:\WINDOWS\system32\ja-JP\wininet.dll.mui |
7netcpl.cpl.mui | C:\WINDOWS\system32\ja-JP\inetcpl.cpl.mui |
7nseng.dll | C:\WINDOWS\system32\inseng.dll |
7nseng.dll.mui | C:\WINDOWS\system32\ja-JP\inseng.dll.mui |
7ormaliz.dll | C:\WINDOWS\system32\normaliz.dll |
7rlmon.dll | C:\WINDOWS\system32\urlmon.dll |
7rlmon.dll.mui | C:\WINDOWS\system32\ja-JP\urlmon.dll.mui |
7rowseui.dll | C:\WINDOWS\system32\browseui.dll |
7script.dll | C:\WINDOWS\system32\jscript.dll |
7shtml.dll | C:\WINDOWS\system32\mshtml.dll |
7shtml.dll.mui | C:\WINDOWS\system32\ja-JP\mshtml.dll.mui |
7shtmled.dll | C:\WINDOWS\system32\mshtmled.dll |
7shtmled.dll.mui | C:\WINDOWS\system32\ja-JP\mshtmled.dll.mui |
7shtmler.dll | C:\WINDOWS\system32\mshtmler.dll |
7shtmler.dll.mui | C:\WINDOWS\system32\ja-JP\mshtmler.dll.mui |
7xtmsft.dll | C:\WINDOWS\system32\dxtmsft.dll |
7xtrans.dll | C:\WINDOWS\system32\dxtrans.dll |
もちろん、ファイル名を変更すると正しくダイナミックリンクできなくなってしまうので、DLL内のインポートテーブルも書き換えられています。ちなみにリソースセクションのバージョン情報には、元ファイルのファイル名や著作権情報、ファイルバージョン番号がそのまま含まれているようです。これらはDependency Walkerで確認しました。
けれども、ファイル名とインポートテーブルを書き換えるだけでは正しく動作するとは思えないので、他にも書き換えている箇所があるのかも知れません。
ところで「shlwapi.dll」って再配布できないファイルですよね。しかも、バイナリの書き換えまで。これは明らかにライセンス違(以下略)