1

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

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

4

1 回答 1

-4

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

基本上,您会将 source.cpp 视为 .txt 并使用您喜欢的任何 api 将文件获取为 .txt 文件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;
} 

还必须在标头而不是 cpp 中有定义,因此可能必须通过采用and对inline来将其添加到标头中。.h.cpp

于 2016-05-20T04:33:50.980 回答