4

プログラムで静的呼び出しグラフ分析を使用して、どのような問題を見つけたいと考えていますか? FxCop は静的コール グラフ分析を使用しますが、この手法を使用してどのような問題を検出しますか?

http://msdn.microsoft.com/library/bb429476.aspx
http://en.wikipedia.org/wiki/Callgraph

知識不足で申し訳ありませんが、グーグルでいくつかの情報を見つけましたが、それが非常に不完全であることを恐れています. ありがとう!

4

2 に答える 2

4

コールグラフ自体はまさにそれです。「間違った」呼び出しグラフはありません (再帰を禁止するスタイル チェックがない限り)。

本当の問題は、プログラムのある時点でのコードがどのように問題になるかを理解するには、通常、その時点での世界の形 (どのデータ構造が生きているのか、どのような値が含まれているのか、どのような関係があるのか​​) を理解する必要があるということです。そのコードポイントがアクティブな瞬間。コール グラフは、実行が対象のコード ポイントに到達する方法を示し、そのコール グラフ パスに沿ったすべてのコードがコード実行コンテキストを設定します。これにより、静的アナライザーは「状況に応じた」分析を生成できるようになり、より正確な回答が得られます。

これは 2 番目の問題につながります: 正確なコール グラフを取得するにはどうすればよいでしょうか? A から B を直接呼び出す場合、「A が B を呼び出す」と書き留めて、これが正確なコールグラフの事実であると感じるのは簡単です。しかし、A が間接ポインター (仮想メソッドのディスパッチと言えますか?) を介して呼び出しを行うと、突然、A が誰を呼び出しているかが明確ではなくなります。あなたは最終的にA-might-call-B1、A-might-call-B2、... Aが実際に呼び出すものは、Aが実行されるコンテキストに依存します...おっと、製造するにはコールグラフが必要ですコールグラフ。一種の良いニュースは、呼び出しグラフを下から構築することです。「これは確かに真だとわかっているので、それは確かに真でなければなりません」。分析担当者がそれを理解できない場所では、通常、保守的な推測を行います: (「これらの呼び出しはすべて可能かもしれません。私には可能です」

于 2011-05-04T14:49:42.600 に答える
1

これは私が見つけたものです:

コールグラフは、プログラムの実行、推奨ガイドラインへの違反、コード インジェクション攻撃の可能性に関する問題を検出するために使用されます。

さまざまなメソッド間の呼び出し関係のグラフを作成することにより、特定のメソッドが呼び出される特定の時間にどこで問題が発生するか、または特定のメソッドがどのように呼び出されるかを簡単に確認できます。プロシージャ/関数が、コードのモジュール性を維持するなどのガイドラインに違反している可能性がある場合は、簡単に確認できます。これらの呼び出し関係とその構造により、特定の時点で悪意のあるコードが挿入される可能性がある場所を簡単に確認できます。このように、コールグラフは静的分析にコンテキストを提供し、より正確な結果を生成します。

FxCop は静的な呼び出しグラフを使用するため、上記をある程度推測することしかできません。

于 2011-05-04T11:32:57.300 に答える