問題タブ [control-flow-graph]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - LLVM による ac/c++ プログラムのすべての可能なパスの検索
LLVM でプログラム内の可能なパスを見つけようとしています。現在、コード内のすべての関数の入口から出口 BB までのパスを見つけることができます。しかし、それは私が必要とするものではありません。私が必要としているのは、CFG を拡張して (おそらく関数呼び出しをインライン化することで?!)、ソース コード全体の CFG を持ち、この拡張された CFG 内のパスを見つけることです。最初に -inline パスを使用して最初にすべての関数をインライン化し、次にパスファインダー パスを実行することを考えていましたが、観察したように、-inline はコード (cpp ファイル) でインラインで明示的に言及されている関数に対してのみ機能します。何百もの関数を調べて、それらすべてにインラインを追加することはできません。また、すべての呼び出しがインライン化され、呼び出しが失われないことを保証する必要もあります。インライン化が私の唯一のオプションであるか、それがオプションであるかさえわかりません。これについての考えは大歓迎です。
**明らかに、私のソース コードには再帰呼び出しはありません。
c - __stack_chk_fail を呼び出した後の予期しない動作
x86 では、GCC は を呼び出したいときに次の命令を生成します__stack_chk_fail
。
同様の動作が ARM でも発生します。
静的解析ツールで CFG を構築する場合、CFG アルゴリズムは、__stack_chk_fails
呼び出された基本ブロックの最後の命令を特定できません。
CPU が実行すべきではない命令 (または場合によってはデータ エントリ) を実行するのを防ぐために、呼び出しの後にある種のリターン命令を用意することは合理的です。__stack_chk_fail
これらの場合、CFG ジェネレーター アルゴリズムは、それが通常の関数呼び出しであると想定し、別の関数のコード (前の例) またはデータ エントリ (後者の例) へのトラバースを続けますが、これはまったく望ましくありません。
それで、私の質問は、GCCが基本ブロックの終点にreturn (またはbranch ) 命令を挿入しないのはなぜですか?
ocaml - OCaml または Reason のコール グラフ ジェネレーター
OCaml/Reason コード リポジトリを分析し、さまざまな関数間の呼び出しを理解したいです。そのような機能を提供するツールはありますか?
algorithm - 有向グラフ内のすべての可能なパスから共通のパスを見つける
巡回有向グラフのすべての可能なパスが常にアクセスする共通ノードを見つけようとしています。私の考えは、可能なすべてのパスを計算してから、共通の要素を検索することです。ただし、a)あまり効率的ではないようであり、b)サイクルが考慮されていません。
目標:改竄防止方法として忘却ハッシュ境界を実装することです。そのためには、制御フロー グラフで入力にとらわれない共通の基本ブロックのセットを特定する必要があります。別の言い方をすれば、特定の入力に対して実行されるプログラムの確定的なチャンク (基本ブロックのセット) を見つけたいと考えています。
python - Pythonコードの制御フローグラフを取得するには?
gcc コンパイラ オプションで指定されたオプションと同様に、特定の Python コードの制御フロー グラフをダンプしたいと思います: c コードの -fdump-tree-cfg。
Python コードの AST (Abstract Syntax Trees) を取得することには成功しましたが、AST フェーズから制御フロー グラフを取得するのは非常に複雑で面倒です。
Python コードの制御フロー グラフを直接取得する簡単な方法はありますか? 助言がありますか?
ところで、私はpython3.5を使用しています
皆さん、ありがとうございました!
PS ボンネットの下で使用しているインタープリターの種類は本当にわかりません。私が知っている限り、それは CPython であり (よくわかりません)、PyPy(Rpython) ではないと思います。どうすれば確認できますか?
python-3.x - Python コードの AST をたどるには、いくつかの支援が必要です
Python コードの制御フロー グラフを取得するための正しいアプローチを見つけようとしています。ac プログラムで gcc 出力を使用して得たのと同様の出力を探しています (gcc -fdump-tree を使用しました)。 -cfg)。
たとえば、次の単純な c ソース コードが与えられた場合、私の意図を明確にするための短い例を示します。
次のような制御フロー グラフを取得しました。
cfg の出力は、ループ (for、while など) ではなく、元のc キーワードとgoto命令で構成されており、私の目的には最適です。
そのため、過去数日間、Python コード用の cfg ジェネレーターの実装を検討していましたが、AST モジュール (読み取り: Green Tree Snakes )を掘り下げましたが、AST は各キーワードを非常に詳細に解析しているように見えますが、避けたいと思います。元の python スクリプトから取得した元のキーワードの流れに焦点を当てることにもっと興味があります。
それを達成する方法はありますか?
皆さん、ありがとうございました!
c - Clangを使用してソースコードから制御フローグラフを抽出する方法は?
過去 5 年間、私は Gnu Compiler Collection (gcc/g++) を使用してきたため、clang の初心者であり、C/Objective C/C++ ソース コードの制御フロー グラフを生成したいと考えています。ありがたいことに、こことここを読んで、CFG クラス関数を使用してソースレベルのステートメントの基本的なブロック表現を取得できることがわかりました: CFG::buildCFG() CFG::dump()
これは素晴らしい :) ですが、buildCFG に渡す前に関数の本体を AST 形式と ASTContext で取得する方法はまだ不明です??
特定のソースコードのCFGをclangでエクスポートする方法を示す短いスニペットをここに教えてください。
皆さん、ありがとうございました
c - clangのpythonバインディングでライブ変数を取得する
私は Python で C 言語用の分析ツールを作成しており、この目的で clang python バインディングを使用しています。これまでのところ、C ファイルの AST を取得して処理することができました。ここで、プログラムの特定の時点でライブ変数を見つける必要があります。ライブ変数とは、そのコード行の後で再割り当てが開始される前に使用される変数を意味します。clang にはすでに関連するコードが含まれていることに気付きましたliveVariables.h
。
Pythonバインディングで動作させる方法を知っている人はいますか? liveVariables
AST と を使用して関数を呼び出すにはどうすればよいTranslationUnit
ですか?
c# - このクラスの制御フロー グラフと循環的複雑度を描画する方法は?
このプログラムの循環的複雑度を計算する方法は? だから私はcfgを描く必要があります。