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 自动插桩的过程

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值