C プログラムがあり、具体的な入力に対応する実行パスに属するすべての分岐条件を追跡したいと考えています。たとえば、単純なプログラムを考えてみましょう:
#include <stdio.h>
#include <string.h>
int test(char* a) {
if (strcmp(a, "123") == 0)
return 0;
if (strcmp(a, "123") < 0)
return -1;
else
return 1;
}
int main() {
char* a;
return test (a);
}
でa = "1234"
、プログラムは戻り1
、対応するパス条件はstrcmp(a, "123") > 0
です。strcmp
、"123"
およびこの演算子の値 (-1)を収集したい。そうすることを可能にするアプローチはありますか?私は最初に C パーサーを使用することを考えましたが、それほど単純ではないようです。パラメーターの値を取得するには、ポインター分析または外部ライブラリー呼び出しを処理する必要がありますが、これを解決する方法がわかりません。