2012-03-21 20 views

答えて

16

Frama-Cは、プログラム依存グラフの計算に基づくa slicer for C programsのオープンソース静的解析プラットフォームです。

Cのような実際のプログラミング言語で書かれた実際のプログラムをスライスすることは、多くの特殊なケースや概念が科学的な出版物では見過ごされることに注意してください。それでも、私はあなたがFrama-CのPDG計算より簡単なものは見つけられないことを確信しています。なぜなら、それは唯一のオープンソースの1つであり(私が知っている)、第2に、Cプログラムを扱う他のPDG計算は、同じ問題を解決し、同じ概念を導入する。

int a, b, d, *p; 

int f (int x) { 
    return a + x; 
} 

int main (int c, char **v) { 
    p = &b; 
    a = 1; 
    *p = 2; 
    d = 3; 
    c = f(b); 
} 

コマンドframa-c -pdg -dot-pdg graph -pdg-print t.cそれぞれmain()f()のPDGを含むドットファイルgraph.main.dotgraph.f.dotを生成する:ここ

は一例です。

あなたは、このようにそれらのいずれかのプリティプリントにdotプログラムを使用することができます。dot -Tpdf graph.main.dot > graph.pdf

結果は以下の通りです:

PDG of main()

は、ノード*p = 2;へのノードc = f(b);からエッジに注意してください。 Cプログラムにとって有益であると主張するPDG計算は、エイリアシングを処理しなければならない。

一方、基準「文c = f(b);の入力」にスライスし、このPDGを使用してスライサーでもポインタアクセス*pを通じて、関数呼び出しに影響を与えることができないd = 3;を、取り除くことができるでしょう。 Frama-Cのスライサーは、PDGで指定された依存関係を使用して、ユーザー指定のスライシング基準に役立つステートメントのみを保持します。例えば、コマンドframa-c -slice-wr c t.c -then-on 'Slicing export' -printdへの割り当てが削除された以下に低減プログラムを生成する:

/* Generated by Frama-C */ 
int a; 
int b; 
int *p; 
int f_slice_1(int x) 
{ 
    int __retres; 
    __retres = a + x; 
    return (__retres); 
} 

void main(int c) 
{ 
    p = & b; 
    a = 1; 
    *p = 2; 
    c = f_slice_1(b); 
    return; 
} 
+0

あなたの注目すべき助けに感謝します。私はFrama-Cの使い方を学び始めています。 Frama-Cのリファレンスでは、graph.main.dotグラフのラインのミーナニングを見つけることができません。さまざまな線のスタイルは何を意味しますか?またはこれに関する資料があります。 – user1283336

+0

@ user1283336 3種類の矢印があります:それぞれデータ、制御、アドレスの依存関係です。プログラム 'int a、b、* p; ボイドメイン(int型のx、int型のY、int型Z) {p =&。 * p = x; if(y) b = z; } 'には3種類の依存関係がすべて含まれています。最初の例と同じコマンドラインを使用すると、どちらがどちらであるかを認識するのが難しくなりません。スライサーの内部についてユーザーが利用できる説明はありません。申し訳ありませんが、スライサーの使用方法の外部説明のみです。 –

+1

'-dot-pdg'ではなく-pdg-dotでなければならないと思いますか?少なくとも私にとっては前者の方法でしか働かなかった – Paddre

4

gccを使用しているメソッドの依存関係を視覚化したい場合は、gccのオプション-fdump-rtl-expandが役に立ちます。

オプションファイル-fdump-rtl-expandgccを使用してコンパイルした各ソースファイルに対して、*.expandファイルを出力します。

ツールに入力されたファイルegyptは、メソッドの依存関係を示すグラフを生成します。

+0

A PDGは、そのノードの文であるグラフです。たとえば、http://www.grammatech.com/research/papers/slicing/slicingWhitepaper.htmlを参照してください。 –

関連する問題