c++ - 用于在 LLVM 中编写 pass 的高级工具

标签 c++ c llvm

通常如果要修改LLVM IR,需要写pass。然而,如果更高级别的工具可以为您提供帮助,那么有时自己编写 pass 就显得有些矫枉过正了。

例如,有人可能希望记录程序中的每个加载存储。为此,他需要注入(inject)执行日志记录的代码。现在如果有一个更高级别的工具,它可以提供回调给我们写我们想要的东西。因此,在这种情况下,例如,它可以为我们提供 OnLoadOnStore 函数,我们可以填写这些函数来告诉工具在每次加载和存储时要做什么。存在这样的工具吗?

所以基本上我想要类似于动态二进制检测工具提供的东西,但可以与 LLVM 一起使用,用于编译时代码注入(inject)。

最佳答案

我认为你应该考虑使用 PIN 而不是 LLVM 来处理这些事情:http://www.pintool.org/

PIN 使您能够在多个粒度级别插入检测/分析代码:指令、基本 block 、函数、跟踪,甚至共享库的加载/卸载。这可能是一种更实用的方法,因为您不需要编译应用程序 - 因此您可以分析非开源的程序。

PIN 码有 Windows 和 Linux 版本。

PS:另一个似乎有用的工具:http://eces.colorado.edu/~blomsted/llvmpin/llvmpin.html

关于c++ - 用于在 LLVM 中编写 pass 的高级工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12534380/

相关文章:

c++ - 在 C++ 中拆分字符串需要帮助

c++ - 给定大小 N 和类型 T 生成元组的函数

c++ - 使用 libxml2 sax 解析器获取值错误

c - 尝试用 C 创建基本的二叉搜索树,但对 'unused variable' 感到困惑?

c++ - 如何在 LLVM IR 中获取字符串文字的值?

iOS 位码 - 安全问题

c++ - C++ 中的嵌套 For 循环三角形

c - 如何在 C 中生成固定波形表?

c - 相同的程序给我不同的输出

gcc - 如何从 gcc(或其他地方)获取合法 ARM 操作码列表?