c语言自动插桩,01 - LLVM Pass 实现 C函数 插桩

网上我就搜到这一篇文章介绍使用 LLVM Pass 的方式,来实现函数插桩。

但是按照他文章的一步步坐下来,发现各种报错,要不就是 pass 无法被 xcode 加载,反正遇到了不少的问题。

而且该作者很多核心的部分都没有写出来,不知道是因为太简单,还是不想让别人知道 ~

经历了两周多左右的研究,以 LLVM 小白的身份,终于跑起来了 ~ 不容易 ~

注意:如下内容,最好需要你已经有 LLVM 环境!!!

02. C 函数 手动插桩

long _ly_fun_b()

{

struct timeval star;

gettimeofday(&star, NULL);

long b = star.tv_sec * 1000000 + star.tv_usec;

return b;

}

void _ly_fun_e(char *name, long b)

{

struct timeval end;

gettimeofday(&end, NULL);

long e = end.tv_sec * 1000000 + end.tv_usec;

long t = e - b;

printf("%s %ld us\n",name, t);

}

int main()

{

long b = _ly_fun_b();

printf("hello world!");

_ly_fun_e("main", b);

return 0;

}

手动插桩实际上就是将预先写好的开始和结束两个函数的调用,手动写入到 main() 执行前 和 执行后。

那么自动插桩了?

就是不需要手动在 main() 中进行修改,而是在编译的过程中,自动将上面2个函数,插入到 main() 执行前 和 执行后。

那么如何在编译的时候,在 main() 插入其他的 函数调用 了?

03. 通过 LLVM Pass 自动插桩的过程

你可能感兴趣的:(c语言自动插桩)