代码调试手段之__builtin_return_address

了解如何在Linux内核和应用程序中追踪函数调用。在内核中,利用dump_stack()函数进行栈回溯分析;而在应用程序中,通过__builtin_frame_address()和__builtin_return_address()获取栈信息。可以借助gdb或readelf命令查找函数表,通过函数地址查找对应函数名,实现函数调用的追踪。

如何知道某个函数被是被谁调用的?

Linux 内核:可通过dump_stack()分析

dump_stack()使用方法_yanlaifan的博客-CSDN博客_dump_stack

linux内核中打印栈回溯信息 - dump_stack()函数分析_落尘纷扰的博客-CSDN博客_dump_stack

应用程序:使用 __builtin_frame_address()、__builtin_return_address()分析

__builtin_return_address(LEVEL)函数解释和运行实战_小可爱amour的博客-CSDN博客___builtin_return_address

通过__builtin_return_address()获取函数地址后,再到到函数表中根据函数地址查找到对应的函数名即可,两种方式

1. gdb方式查找函数表( gdb 根据函数地址 找 对应的函数名 - 知乎gdb查看内存地址和栈中的值—查看虚函数表、函数地址_ztguang的博客-CSDN博客_gdb查看内存地址和栈中的值 )

(gdb) info symbol 0x9e250   //通过地址查找函数名

(gdb) info address func_name       //通过函数名查找地址

2.readelf 命令方式查看函数表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值