【问题标题】:Pin Like Tool for compile time injection of instrumentation codePin Like Tool 用于在编译时注入检测代码
【发布时间】:2012-09-14 01:29:46
【问题描述】:

您可能知道,PIN 是一个动态二进制检测工具。例如,通过使用 Pin,我可以检测应用程序中的每个加载和存储。我想知道是否有类似的工具可以在编译时注入代码(使用更高级别的信息,不需要我们编写 LLVM 通道),而不是像 Pin 这样在运行时注入代码。我对这种用于 LLVM 的工具特别感兴趣。

【问题讨论】:

    标签: c++ c llvm intel-pin


    【解决方案1】:

    您可以编写自己的LLVM passes 并将它们应用到您的代码中,以便在编译期间“检测”它。这些在 LLVM IR 上工作并生成 LLVM IR,因此对于某些任务来说,这将是一件非常自然的事情,而对于其他任务来说,这可能很麻烦或困难(因为 LLVM 和 IR 以及源语言之间的差异)。这取决于。

    【讨论】:

    • 好像我还不知道,天才:)!我说的是一种可以在更高级别为您执行此操作的工具,例如,我告诉该工具在每次加载时执行此操作,以及在每个商店执行此操作。当然我可以自己写通行证,但这不是我的问题。
    • 那么为什么不采用这种方法呢?您有什么想法更适合您的需求?
    • 因为自己做比让一个工具给我写一个pass更难。对于某些事件,我只需要这么说就可以了,就像 Pin 的情况一样。所以基本上我想要一个可以为我们创建通行证的工具。
    • 根据我对 LLVM 通行证的经验和我对 Pin API 的有限经验,它们非常相似,我认为没有那么大的区别。一个不错的技巧是使用 llc -march=c++ 生成 LLVM C++ API 代码,该代码为您提供给它的 C/C++ 代码构建 IR(这有意义吗?),如果像大多数凡人一样,您发现编写自己的代码更容易想要在 C/C++ 中做而不是调用 C++ API 为其生成 IR,这可以非常方便。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 2011-02-02
    相关资源
    最近更新 更多