MTK 驱动(73)--- Kernel Backtrace 无法显示出具体的地址.

本文介绍了解决KernelBacktrace无法显示具体地址的问题。在Android系统中,默认开启的kernelpointerrestrict功能会屏蔽地址信息以提高安全性。文章提供了通过修改kptr_restrict参数来查看内核回溯地址的方法。
 Kernel Backtrace 无法显示出具体的地址.

 
 在手工抓kernel backtrace, 无法抓到显示具体的地址. 如:
 
 XXXXX:/ # cat proc/self/stack
[<0000000000000000>] save_stack_trace_tsk+0x0/0xd8
[<0000000000000000>] proc_pid_stack+0xbc/0x110
[<0000000000000000>] proc_single_show+0x54/0xa8
[<0000000000000000>] seq_read+0x1c4/0x460
[<0000000000000000>] __vfs_read+0x34/0xf0
[<0000000000000000>] vfs_read+0x78/0x138
[<0000000000000000>] SyS_read+0x5c/0xc8
[<0000000000000000>] cpu_switch_to+0x210/0x2b8
[<0000000000000000>] 0xffffffffffffffff
 
同样, 通过 proc/kallsyms 时, 默认也会发现无法打印出地址信息.
 
 
 这个是因为kernel pointer restrict的 限制, 为防止指针地址泄露,给hacker 有可乘之机, 将地址屏蔽了. android 默认有开启了,在android O 上参考代码:
 
/system/core/init/init.cpp
 443/* Set kptr_restrict to the highest available level.
444 *
445 * Aborts if unable to set this to an acceptable value.
446 */
447static int set_kptr_restrict_action(const std::vector& args)
448{
449 std::string path = KPTR_RESTRICT_PATH;
450
451 if (!set_highest_available_option_value(path, KPTR_RESTRICT_MINVALUE, KPTR_RESTRICT_MAXVALUE)) {
452 LOG(ERROR) << "Unable to set adequate kptr_restrict value!";
453 security_failure();
454 }
455 return 0;
456}
 
手工修改方式是:
 
adb shell "echo 0 > proc/sys/kernel/kptr_restrict"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值