通过LLVM查找C / C ++程序中所有可能的路径
Finding all possible paths in a c/c++ program by LLVM
我正在尝试通过LLVM在我的程序中找到任何可能的路径。现在,我可以在代码中找到所有函数从进入到退出BB的路径。然而,这不是我需要的。我需要的是扩展 CFG(也许通过内联函数调用?!)为整个源代码提供一个 CFG 并在这个扩展的 CFG 中找到路径。我正在考虑首先使用 -inline pass 先内联所有函数,然后运行我的探路器通路,但正如我观察到的那样,-inline 仅适用于代码(cpp 文件)中明确内联提到的函数。我无法浏览数百个函数并内联添加到所有这些函数中。我还需要保证所有呼叫都是内联的,并且不会错过任何呼叫。我不确定内联是我唯一的选择,甚至不是一个选择。对此的任何想法都是值得赞赏的。
**显然我的源代码中没有递归调用。
不完全确定你在问什么,但是你可以使用几乎任何编程语言来解析 source.cpp 和 source.h 来查找函数声明/定义并根据某些规则添加inline
。
基本上,您将源代码.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
对将其添加到标头中。
相关文章:
- 有可能在Armadillo中复制MATLAB circshift方法吗
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 有可能使shared_ptr协变吗
- 有可能在信号处理程序中设置promise吗
- 是否有可能实现O(N)时间和O(1)空间解决方案,以实现C++中的字符串循环移位
- 是否有可能构建面向Linux和Windows的.Net Core C++ / CLI应用程序?
- 是否有可能使用debug_info获取ELF文件的源代码?
- C++,是否有可能/如何定义在.h和.cpp源文件中调用函数的类构造函数
- 有可能在C++中有类的查找表吗
- 是否有可能让 c++ dll 在后台运行 python 程序并让它填充向量图?如果是这样,如何?
- 向量的大小是否有可能为 1 但其中的元素数量为零?
- 是否有可能编写新的叮当声现代化规则?
- 是否有可能通过指向另一个未关联的子对象的指针来获取指向一个子对象的指针?
- 是否有可能通过演绎指南实现整个 std::make_tuple 功能?
- 是否有可能在没有复制的情况下传递 std::vector<int> 作为参数来获得 std::vector<std::array<int, 3>>?
- 是否有可能具有放入容器的移动操作的类型?
- 是否有可能通过溢出 C 中的第一个元素来写入数组第二个元素
- 声明是否有可能逃脱其封闭的名称空间
- git-是否有互联网上某处所有可能错误的列表
- 是否有可能有一个派生类继承最终函数但创建相同的函数(而不是重写)