Использование Clang Static Analyzer непосредственно в файлах битового кода

Я хотел знать, можно ли заставить анализатор clang работать непосредственно с файлами битового кода (*.bc)? После этот пост об идентификации целочисленных переменных, которые могут иметь только значения 0 или 1, я начал изучать анализатор clang, и он дал мне хорошие результаты. Например, когда я использовал следующий код C с:

$ scan-build clang -O3 ./main.c

выяснилось, что деление на ноль действительно невозможно:

int should_expand(char *s)
{
    int tmp = 0;
    int ret = 0;
    char *p;

    for (p = s; p && *p; p++)
    {
        if (*p == '\\')     { p++;     }
        else if (*p == '&') { ret = 1; }
    }
    if (!((0 <= ret) && (ret <= 1)))
    {
        int j = 0;
        ret = 5 / j;
    }
    return ret;
}
int main(int argc, char **argv)
{
    if (should_expand(argv[1]))
    {
        return -1;
    }
    return 0;
}

Я думал, что вставлю оператор if (!((0 <= _) && (_ <= 1))) для каждой целочисленной переменной, а затем передам полученные файлы битового кода анализатору clang. Проблема в том, что я не могу понять, может ли он обрабатывать файлы битового кода или только исходные файлы c? любая помощь очень ценится, спасибо!


person OrenIshShalom    schedule 29.11.2018    source источник


Ответы (1)


Статический анализатор clang работает на clang AST. Он не может использовать на входе биткод — он низкоуровневый для анализатора.

person Anton Korobeynikov    schedule 30.11.2018