ファジングとシンボリック実行の違いは、特定の値を期待するプログラムがある場合は特に理解していると思います(この場合、シンボリック実行は機能し、ファジングはおそらく機能しません)。
しかし、ファジングをまったく使用せずに(可能な限り大きなプログラムを扱っていない場合)、ファジングの代わりにシンボリック実行を使用しない理由はありますか?
いつ両方を使用する必要がありますか?
できるとき
これが通常問題です。
ソースコードにアクセスできたとしても、問題のある入力を見つけるためにプログラムを再解釈することは容易ではありません。
実際、プログラムを「逆転」して、どの入力が特定のことをするのかを確認することは、コンピュータサイエンスで最も難しい問題の1つです。
したがって、実際には、プログラムへの入力をプログラムフローで使用されるシンボルとして解釈することが理論的に可能であり、後で望ましい(または望ましくない)動作を引き起こす可能性がある場合でも、通常、そのようなシンボルを見つけるのははるかに困難で時間もかかります。ランダム入力を試すだけです。