python - 寻找一种轻量级解决方案来系统地检测 C 函数的 if 条件

标签 python c instrumentation

我需要使用轻量级检测工具(例如,使用一些现有的 Python 或 C 预处理器框架)来系统地在 C 函数的 if 条件中插入语句:

例如,让 foo 为 C 函数:

int foo(int x){
   if (x>3) 
        return x;
}

我需要将其转换为

int foo(int x){
   if (x>3){ 
        print ("%d", x); 
        return x;
  }
}

我尝试过使用 LLVM,但它并没有与代码的其他部分更好地集成。在这里,我更喜欢 Python/C 预处理器框架解决方案。感谢您的想法。

最佳答案

您可以考虑使用GCC MELT或者也许是GCC Python Plugin自定义GCC编译器转换其 Gimple 表示形式。这将是一个完整的解决方案,但我不确定它是否符合“轻量级”的标准(因为您需要了解 GCC 内部的细节),但 Clang/LLVM 方法都不是。您可能需要一周多的时间(特别是了解 GCC 或 Clang/LLVM 的内部结构)

顺便说一句,你的问题并不像你想象的那么容易,因为

int foobar(int x) { return (x>3)?(x*6):(x*x); } 

包含条件。另外,您的原始函数完全相当于

int foo(int x){
    while (x>3) // this while is done 0 or 1 time
      return x;
}

而且很容易找到许多其他方式来表达它。

所以纯粹的语法方法永远不会完全有效。因此,你不能指望一些“轻松”的东西。

(我的观点是,C 代码检测从来都不是一个轻量级问题)

关于python - 寻找一种轻量级解决方案来系统地检测 C 函数的 if 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35275926/

相关文章:

python - 防止 GridSpec 子图分离随图形大小而变化

Python 语法/REDIS

.Net 二进制反序列化运行时平台的故障检测/取证

python - Itertools 在 python 中创建 Ts 和 Hs 的组合作为字符串

python - 用python给图像填充颜色

c - 错误 : unknown type name 'record'

c - 将接口(interface)地址传递给bind的正确方法

c++ - Linux:如何测量进程内线程的内存使用情况?

android - Root设备的 INJECT_EVENTS 权限

java - 是否可以使用检测重新定义核心 JDK 类?