AviUtlのプラグインを蒐集しています
AviUtl に patch.aul を導入してあると、例外が発生したときに以下のようなダイアログが表示され、log フォルダに詳細情報を書き出したファイル(以下デバッグ情報ファイル)が出力されます。 https://scrapbox.io/files/638b0a2d40f578001defb168.png
code:2022-12-03_17-36-05-341_15828.txt
patch.aul (r42) debug info file
code : * C++ exception (0xe06d7363)
address : 0x75ad7402 (KERNELBASE.dll + 0x00147402)
plugin_name : ThrowException
func_name : FILTER::func_WndProc()
class_name : .?AVruntime_error@std@@
exception ptr : 0019f0f4
modules
00cd0000-01008000:aviutl.exe (3737D8B0BC1336624BFB7F7C54425C819A208B5FEEE552F5CE9443DD4C6A1A04)
10000000-10261000:exedit.auf (06F2D89D31D6B8F5D1D8B079A2872A467F3C704ED38355E1F19F1FBD9529EE3A)
51250000-52346000:nvopencl32.dll (1B21369CB47704FF92A0940D529D3BAC355155203D2C3CA7B8C1F8DC527E2993)
53f50000-545a9000:nvapi.dll (E8BD7F38FF86E9EC5E0A0A2F383955E17D776F23375B3350AA29B86F736B3215)
56f30000-5705b000:OpenCL.dll (A220FB724FD9C6A8917188971CFCFCF35749509263608692FDCD2BF95F4A72AA)
573d0000-574bb000:DDRAW.dll (CC8687345E7AC20C2DCD21321634C191A035D145F442D0A403584FD77E72B1A1)
575c0000-5768d000:CoreMessaging.dll (14A09B5B9D3759DAAF18D5052B79AA0E8685E835776B3C68A62568B7CD90DDDE)
58960000-58a10000:patch.aul (1E1FC88E3147D0EBB23BDCC81C06B56697BA508883E55AFC02FF986C4E40E895)
59310000-593ef000:AppXDeploymentClient.dll (411C13C472C78FF18D45AAF8838992FD9A6A5CCD7D99B4EF559315E2C8D44728)
59430000-5944b000:ShowLimit.auf (E8AF1030DC90B975E860A506AAA013CC0774F5F04534B0DEAC1E040B7487CBA1)
59450000-59472000:auo_setup.auf (D9641B0E9476C8FBF7DED5E10B32C7509783EB0B8E5403EBC1365D7EB4AF9DC8)
59480000-59710000:CoreUIComponents.dll (BCDD40D4C2905BCF80CB8FD1CB197D17C6022CD7E9A703BC964874BB331D4B2B)
59ba0000-59ba6000:ThrowException.auf (D3ED45ADF378FF391FE7B3BCC11671DF69AEFE024F34E91CD19AF092193267C4)
(省略)
registers
eax : 0019f058
(省略)
stack
0019efd0 0000000000000000
0019efe0 00000000000000000000000000000000
(省略)
このデバッグ情報ファイルのmoduleという項目には、例外が発生した時点で読み込まれているモジュール(プラグインやDLL、EXEなど)の情報が列挙されています。
例:10000000-10261000:exedit.auf (06F2D89D31D6B8F5D1D8B079A2872A467F3C704ED38355E1F19F1FBD9529EE3A)
メモリアドレス:10000000から10261000
ファイル名:exedit.auf
ファイルのSHA256ハッシュ:06F2D89D31D6B8F5D1D8B079A2872A467F3C704ED38355E1F19F1FBD9529EE3A
つまりこの部分を見れば問題解決のヒントとして、例外が発生したときどのプラグインを一緒に使っていたかという情報が得られます。
しかし、ファイル名とハッシュ値だけ教えられても困りますよね。
プラグインを特定するには、誰が、どこで配布している、何という名前のプラグインの、どのバージョンか知りたいところです。
ではファイル名とハッシュ値からこれらの情報を取得するにはどうすれば良いのでしょうか。
プラグイン情報を蒐集しているプロジェクトとしては apm があります。 しかし apm は AviUtl のインストールを支援することを目的としたものなので、新しくインストールする必要のない古いバージョンのプラグインについては情報がありません。
また、各ファイルのハッシュ値についてpatch.aulが利用しているSHA256とは異なりSHA384を利用しているので、そのままでは apm が集めているデータを今回の用途に使うことは出来ません。
というわけで作ったのが「AviUtl Hash Finder」です。
AviUtl Hash Finder
Webページのリンクを開くとプラグインを検索できる画面が開きます。
また「patch」をクリックしてpatch.aulが出力した先ほどのデバッグ情報ファイルを開くと、moduleに出力されたプラグインについてプラグイン名やバージョン、配布場所などをテーブルで表示します。
https://scrapbox.io/files/638b171e40f578001defef81.webm
プラグイン情報の蒐集
AviUtl Hash Finderではプラグイン情報を表示するために各プラグインファイルについて、ハッシュ値とプラグイン名やバージョン等の各種情報をあらかじめデータベースにまとめています。
code:db.json
[
...
{
"filename": "aviutl.exe",
"name": "AviUtl",
"author": "KENくん",
"version": "1.10",
"build": "",
"sha256": "3737D8B0BC1336624BFB7F7C54425C819A208B5FEEE552F5CE9443DD4C6A1A04"
},
...
]
つまり、このデータベースに収録されていないプラグインファイルの情報は表示してくれないので、以下にあらゆるプラグインの情報を蒐集してデータベースを大きくできるかが重要になります。
理想としては配布されている全てプラグインの全てのバージョンの情報が蒐集されていることが望ましいですね。
とはいえそれは大変なので少しずつ集めており、最近の有名どころについては粗方対応できているかなと思います。
一方でこのへんとかにまだ収録できていないプラグインがまだまだあるので、「これ収録されてないんだけど!」というときは GitHub の方に issue 投げたり Twitter の方に文句行ってもらえれば対応すると思うのでよろしくお願いします。