Windows ストア アプリの ComboBox コントロールを C# に逆コンパイルしようとしていますが、コードがありません。代わりに、すべてのプロパティが別のアセンブリへの呼び出しになっているようです。実際のコードが存在する場所を見つけるにはどうすればよいですか? また、C# でメソッド本体を読み取るにはどうすればよいですか? 私はアセンブリを読むことができないので、それは私には役に立たないでしょう
2 に答える
WinRT の内部構造をリバース エンジニアリングする方法に関する注意事項。
内部では、WinRT は純粋な COM です。マシンで最初に見たい場所は
C:\Program Files (x86)\Windows Kits\8.0\Include\WinRT
このディレクトリには、IDL ファイルまたはInterface Description Language
. IDL は、COM タイプを記述するための出発点です。をすばやく検索すると、型の宣言をComboBox
見つけることができます。Windows.UI.Xaml.Controls.IDL
ComboBox
[marshaling_behavior(agile)]
[threading(both)]
[static(Windows.UI.Xaml.Controls.IComboBoxStatics, 0x06020000)]
[version(0x06020000)]
[composable(Windows.UI.Xaml.Controls.IComboBoxFactory, public, 0x06020000)]
runtimeclass ComboBox : Windows.UI.Xaml.Controls.Primitives.Selector
{
[default] interface Windows.UI.Xaml.Controls.IComboBox;
[overridable] interface Windows.UI.Xaml.Controls.IComboBoxOverrides;
}
これは、C# のインターフェイス宣言に似ているので、そのまま読むことができます。以前に COM をいじったことがある場合は、元の IDL 構文からの新しい属性が表示されます。ランタイム サポート ライブラリに組み込まれている言語プロジェクションを支援するための追加機能は、WinRT が実装の継承、ジェネリック、静的クラス メンバー、純粋な COM にはない機能をサポートしているという錯覚を生み出します。
これらの IDL ファイルはmidlrt.exe
、コンパイラなどのツールで使用できる機械可読形式にコンパイルされます。あなたはすでにそのフォーマットを知っています. の出力midlrt.exe
は.winmd
ファイルです. 以前のタイプ ライブラリと同様に、大幅に強化され、基になる形式は.NET のアセンブリ マニフェスト形式から採用されました。そのため、.winmd ファイルを逆コンパイルすることは役に立ちません。既にマシンにソースがあります ;)
COM ではよくあることですが、レジストリは、COM サーバーのコードを含む実行可能ファイルを見つけるために使用されます。を開始regedit.exe
して に移動しHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId
ます。アプリで作成できるすべての WinRT の種類の一覧が表示されます。Windows.UI.Xaml.Controls.ComboBox
キーは、あなたが興味を持っているものです。コードを含む DLL を指す値に注意してください:DllPath
私C:\Windows\System32\Windows.UI.Xaml.dll
のマシン上。CLSID 値は、おなじみの COM クラス GUID であり、クラス ファクトリにインスタンスの作成を要求するために使用されます。
それはあなたが壁にぶつかったところです。DLL には、ほとんどの COM サーバーと同様にネイティブ コードが含まれています。C++ で記述され、マシン コードにコンパイルされます。逆コンパイルの影響を受けにくい、18 メガバイトのモンスターです。
それで、私はアセンブリを見つけました。システム上の .dll ファイル (例: 私の場合は Windows.XAML.UI.Controls.dll) を検索するだけで済みますが、C# に逆アセンブルすることはできません。WinRT アセンブリ用の C# 逆アセンブラーがないことが判明しました (少なくとも、私が最後に見たとき)。