通过LLVM查找c / c ++程序中的所有可能路径

时间:2016-05-20 03:58:07

标签: c++ clang llvm inline control-flow-graph

我试图通过LLVM在我的程序中找到任何可能的路径。现在我可以在我的代码中找到从入口到出口BB的所有函数的路径。然而,这不是我需要的。我需要的是扩展CFG(可能通过内联函数调用?!)来获得整个源代码的CFG并在此扩展CFG中查找路径。 我想首先使用-inline传递来内联所有函数然后运行我的路径查找器传递但是我观察到-inline仅适用于在代码中明确提到内联的函数(cpp文件)。我无法通过数百个功能并为所有功能添加内联功能。我还需要保证所有呼叫都是内联的,不会错过任何呼叫。我不确定内联是我唯一的选择,甚至是一个选项。任何想法都表示赞赏。

**显然我的源代码中没有递归调用。

1 个答案:

答案 0 :(得分:-4)

不完全确定你在问什么,但你可以使用任何程序语言来解析source.cpp和source.h来查找函数声明/定义,并根据某些规则添加inline

基本上,您会将source.cpp视为.txt,并使用您偏好的任何api将文件作为char *。让它搜索(然后搜索参数和结束)

// FindFunctions.cpp
#include "..."
...

char * AddFuncDecChars( _In_ char * file, char * stringToBeInserted)
{
    //Find possible functions with `()`.
    int[] PossFuncs = FindParenths(File);
    // Check to see if space delimited block followed by another block or
    // multiple space delimited blocks with commas.
    int[] VerifiedParens HasSpaceDelimWithPossibleCommas( PossFuncs, 
    File);
    char * Change InsertStringToFunc( File, VerifiedParen,
    stringToBeInserted);
    return Change;
} 

同样inline必须在标头中定义而不是cpp,因此可能需要通过引入.h.cpp对将其添加到标头中。