uftrace实现原理

4 篇文章 0 订阅

"-pg"指定编译器在函数入口插入对mcount()桩函数的调用,而“-finstrument-functions”会指定编译器在函数入口插入对__cyg_profile_func_enter()函数的调用,在函数返回时插入对__cyg_profile_func_exit()函数的调用。 uftrace对这2种情况都能支持。正常情况下,c库提供了对这些桩函数的定义,所以我们链接程序时,是可以链接到c库里面的桩函数定义。 

 

 

[root@localhost test]# readelf -s /lib64/libc.so.6 | grep mcount

111: 0000000000101780 91 FUNC GLOBAL DEFAULT 12 _mcount@@GLIBC_2.2.5

419: 000000000013d6a0 50 FUNC GLOBAL DEFAULT 12 _dl_mcount_wrapper_check@@GLIBC_2.2.5

1616: 000000000013d680 23 FUNC GLOBAL DEFAULT 12 _dl_mcount_wrapper@@GLIBC_2.2.5

2010: 0000000000101780 91 FUNC WEAK DEFAULT 12 mcount@@GLIBC_2.2.5

2151: 0000000000000000 0 FILE LOCAL DEFAULT ABS mcount.c

4104: 000000000013d6a0 50 FUNC LOCAL DEFAULT 12 __GI__dl_mcount_wrapper_c

4225: 0000000000100a00 335 FUNC LOCAL DEFAULT 12 __mcount_internal

6183: 0000000000101780 91 FUNC GLOBAL DEFAULT 12 _mcount

6220: 0000000000101780 91 FUNC WEAK DEFAULT 12 mcount

6721: 000000000013d680 23 FUNC GLOBAL DEFAULT 12 _dl_mcount_wrapper

7260: 000000000013d6a0 50 FUNC GLOBAL DEFAULT 12 _dl_mcount_wrapper_check

 

 

如何利用mcount桩函数:

weak类型的符号与强类型符号相同时,会被强类型符号覆盖,有相同的weak类型符号时,会被占用内存最大的weak类型符号覆盖,通过这个特性,可以利用mcount桩函数。

 

利用方法1:

自己编写一个带有mcount强符号的动态库并链接该库,覆盖掉标准库中符号

 

参数传递,可以考虑通过环境变量,文件等方式来传递

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值