通常如果要修改LLVM IR,需要写pass。然而,如果更高级别的工具可以为您提供帮助,那么有时自己编写 pass 就显得有些矫枉过正了。
例如,有人可能希望记录程序中的每个加载
和存储
。为此,他需要注入(inject)执行日志记录的代码。现在如果有一个更高级别的工具,它可以提供回调给我们写我们想要的东西。因此,在这种情况下,例如,它可以为我们提供 OnLoad
和 OnStore
函数,我们可以填写这些函数来告诉工具在每次加载和存储时要做什么。存在这样的工具吗?
所以基本上我想要类似于动态二进制检测工具提供的东西,但可以与 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/