問題タブ [dynamic-analysis]
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.
code-analysis - 実際に存在するプログラム スライス ツールは何ですか?
「プログラム・スライシング」という用語を紹介しました。そのような機能が欲しいのは当然のことですが、どこかに存在するのでしょうか?
この用語は現在 20 年前のもので、多くの出版物や研究論文などがあるようです。しかし、実際のツールはどこにあるのでしょうか。人々は実際にこの概念を実践しているのか、それとも学術的に研究しているだけなのか?
そこには何があり、どの言語に対応していますか?
編集:私が探しているもの、受け入れられた回答として報いるものは、特にプログラムのスライスを対象としており、ツール/テクニック/などのリストを維持している出版物/組織/などへの参照です。
c# - 述語を動的に分析できますか?
次の 3 つの述語があるとします。
人間の観点からは、pred1
とpred2
が等価であると言うのは自明ですが、そうでpred3
はありません。同等とは、考えられるすべての入力値に対して、両方によって出力される値が同じであることを意味しpred1
ますpred2
。
特定の述語の一意のハッシュを計算したいと思います。同等である 2 つの述語は同じハッシュを持つ必要があり ( と のようpred1
にpred2
)、同等でない 2 つの述語は同じであってはなりません ( と のようpred1
にpred3
)。
以前に (これも .NET 言語で) 実行されたことはありますか? 副作用は基本的にそのような分析の悩みの種であることを私は知っています。しかし、副作用を「禁止」する場合、.NET で (迅速に) 実行できますか?
この要件に対する最善のアプローチは何でしょうか?
static-analysis - 静的コード分析と動的分析の違いは何ですか?
静的プログラム分析と動的分析の違いを知りたかっただけです。これら2つはそれぞれどのように行われますか?
c - たとえばJVMのようなランタイム情報を使用してコンパイルされたプログラムを高速化しますか?
Java プログラムは、特定のタスクにおいて、C などのコンパイル済みプログラミング言語よりも優れたパフォーマンスを発揮します。これは、JVM にランタイム情報があり、必要に応じて JIT コンパイルを行うためです (推測)。
(例: http://benchmarksgame.alioth.debian.org/u32/performance.php?test=chameneosredux )
コンパイルされた言語にこのようなものはありますか? (私はまずCに興味があります)
ソースをコンパイルした後、開発者はそれを実行し、典型的なワークロードを模倣しようとします。ツールは実行に関する情報を収集し、このデータに従って再コンパイルします。
php - 実行時にPHPのコードを動的にインターセプトする方法は?
PHPスクリプトで実行されているすべてのコードを動的に分析できるようにするPHPツール、拡張機能などが必要です(静的分析ツールではありません)。次に例を示します。
- いくつかのメソッドとこのインターフェイスを実装するいくつかのクラスとのインターフェイスがあります。実行時にインターフェイスのメソッドのメソッド呼び出しをインターセプトする必要があります。インターフェイスのどの実装が実装されたメソッド (名前空間を持つクラス) を呼び出したかを確認します。引数の値、メソッドの動作、戻り値、このメソッドの呼び出し前に実行されたもの、後で実行されるものなどです。
- プロパティの書き込みと読み取りを行うオブジェクト インスタンスがあり、プロパティの読み取り/書き込み、変数の割り当てをインターセプトする必要があります。等...);
- ステートメントなどのステートメントをインターセプトし、ステートメントの
echo
前に何が起こったか、ステートメントの式 (変数補間を使用)、このステートメントの後に何が実行されるかを確認します。 - if-else、if-else if、for、while、do-while、case-switch などの条件を分析して、使用されたオペランドとその値、使用された演算子などを特定します。 .
だから、このようなもの。出来ますか?を使用して実装できると思いましたがPHP ticks
、目的には少し不向きであるか、目的を達成するのは不可能に思えます ( がありdeclare(ticks=1)
、ティック ハンドラーを登録すると、ステートメントが実行されるたびにそれを呼び出すことができます。ただし、ifs、fors、whiles などは対象外で、実行中のコードを分析できません...)
何かアドバイスいただけますか?
注目してくれてありがとう!
編集: デバッガーを探しているわけではありません。コードで処理できるものが必要です。たとえば、分析して、何かが期待どおりでない場合は例外をスローします。
security - シンボリック実行と汚染分析の間のギャップは何ですか?
私は最近、EJ Schwartz 博士による「Dynamic taint Analysis と Forward Symbolic Execution について知りたいことすべて (ただし、質問することを恐れていた可能性があります)」というタイトルの論文を読みました。論文では、彼は主にバイナリ レベルのセキュリティ コンテキストでのアプリケーションについて話しました。
動的汚染分析と前方シンボリック実行の正確な違いに興味があります。
私が見る限り、汚染分析は、x に格納されている情報がオブジェクト y に転送されるたびに、オブジェクト x(ソース) からオブジェクト y(シンク) への情報の流れを追跡します。したがって、主な関心事は、どのオブジェクトがソースによって推移的に影響を受ける可能性があるかということです。シンボリック実行では、一部の入力をシンボリック値として扱い、他の変数をシンボリック値で表現しようとします。それにより、シンボリック入力が後続のプログラムに影響を与える条件について答えます。
バイナリ レベルでは、リターン アドレスの上書きによって引き起こされる脆弱性とともに、テイント分析が頻繁に言及されていることがわかります。一方、シンボリック実行は、整数オーバーフロー、ランタイム アサーション エラー、リソース リーク(メモリ リーク、ファイルのオープン/クローズなど)、バッファ オーバーフローなど、より多くのタイプの脆弱な問題に対処できます。
しかし、最新の汚染分析にはデータ フロー分析だけが含まれているわけではないようです。それらのほとんどは、制御フローの状態を追跡します。また、いくつかの脆弱性検出シナリオでは、汚染された入力もシンボリック値として表され、シンボリック実行と同様に伝播されます。一方、シンボリック実行エンジンは、基礎となる制約ソルバーと実行/解釈ランタイムの制限により、異なるパス条件で区切られたシンボリック値を完全に使用することはできません。そのため、期待どおりの高い分岐またはパスカバレッジを実現できません。
では、一般的なケースでは、汚染分析は一種の粗いシンボリック実行であると言えますか、それともシンボリック実行は一種の正確な汚染分析であると言えますか?
c++ - Dtrace を使用して C++ クラスのエントリを調べることは可能ですか?
プログラムが Dtrace を使用してクラスに入るタイミングを確認したいと思います。
例えば:
プログラムmyProgramが関数functionに入ったときに起動しますが、プログラムが関数ではなくクラスに入ったときに起動するプローブをどのように作成できますか?
私は試しました:
dtrace -c './myProgram' -n 'pid$target:myProgram:className:entry'
しかし、それは動作しません