2

これは少し奇妙な質問のように思えるかもしれません。用語が正しいことを願っています...

.Net アプリの MSIL を調べて、どのアセンブリまたは他の外部 .DLL が呼び出されているかを判断する方法はありますか? その場合、それらの外部アセンブリまたは DLL に対してどのような関数呼び出しが行われたかを確認できますか?

私が尋ねる理由はそうです:

私がこれまで行ってきた .Net モバイル開発のほんの少しの経験からすると、プログラマーはアプリケーションが必要とする機能を明示的に記述しなければならないことがよくあるようです。たとえば、ある人が、加速度計へのアクセスを必要とする Windows Phone プラットフォーム用の .Net アプリを作成しているとします。その人は、アプリが加速度計を使用する必要があることを明示的に述べる必要があります。元のソース コードのインクルード ステートメントを分析することで、このプロセス全体を自動化できる可能性があるようです。たとえば、ソース コードに "using Microsoft.Devices.Sensors" という行がある場合、そのアプリでは加速度計、コンパス、または光センサーを使用する必要がある可能性が高くなります。アプリの要件のリストは、プログラマーの指定に依存するのではなく、ソース コードの include ステートメントに基づいて生成できます。そう、アプリの説明では、「このアプリはこのデバイスのセンサーにアクセスする必要があります」と言うことができます。これを行う際の問題は、明らかにソース コードがアプリ ストアに送信されないことです。

私が行った Windows 8 開発のごく一部から、Windows 8 (または Windows Marketplace) 用のメトロ スタイル アプリは、外部 DLL や他の特定のシステム コールの呼び出しが禁止されていることに気付きました。これは、アプリが生成されるコンパイル/ビルド時に適用されます。追加のセキュリティ対策として、MSIL を調べてどの外部アセンブリ/DLL が呼び出されているかを判断するという同じ種類の手法を追加のセキュリティ対策として使用して、サンドボックス化されていない可能性のあるアプリが最終的にアプリ ストアに出ないようにすることができます。

これはまだ行われていないので、おそらく不可能だと思いますが、聞いてみて損はないと思います。実際にはそれらを使用しない特定のアプリにすべての機能を要求することを決定したずさんなプログラマーに頼るのではなく、アプリが実際にアクセスする必要があるものを決定するための非常に巧妙な方法のように思えます.

4

3 に答える 3

2

通常の DLL (.NET DLL ではない) の場合は、Microsoft が作成した無料のプログラムであるDependency Walkerを使用できます。実行可能ファイルと DLL ライブラリを分析し、それに依存する他の DLL を教えてくれます。

.NET DLL の場合、.NET Reflectorを使用できます。.NET DLL をリフレクターにロードし、右クリックして [分析] に移動するだけです。ウィンドウに「依存先」項目が表示され、すべての依存関係が表示されます。

ただし、リフレクターはもはや無料ではありません。それがなく、無料のソリューションを探している場合は、JetBrains DotPeekを使用してください。依存関係のチェックなど、Reflector が行うほぼすべてのことを行います。

最後に、オープン ソース ソリューションが必要な場合は、ILSpyを使用できます。ILSpy にはリストの依存関係もあります。また、ILSpy のソース コードを見て、どのように処理されたかを確認できます。

これが役立つことを願っています!

于 2013-10-10T23:06:53.680 に答える
1

Microsoft は、アセンブリに関する情報を提供するILDASMと呼ばれるツールを Windows または .Net SDKで提供しています。

このツールを使用すると、アセンブリのすべての依存関係を提供するマニフェストを表示できます。

このツールは、リンクされた記事で定義されているコマンド ライン スイッチを使用して、さまざまな形式で出力を提供することもできます。

于 2013-10-10T23:36:55.867 に答える