异常信息转储预研笔记-ptrace调试问题

遇到问题:

编写的demo执行在ptrace()函数报错,errno为1(EPERM),表示当前进程没有足够的权限来执行所请求的ptrace操作。可能操作系统的安全策略限制了对运行进程跟踪或操作。好无奈。

cpp 复制代码
ptrace(PTRACE_ATTACH, ....)

按照权限不够的思路查了一下,果然是为了防止用户访问当前正在运行的进程的内存和状态 , 默认情况下不允许访问。解决方案是修改ptrace-scope的值(0:允许,1:不允许)。

修改前查看了一下ptrace-scope的值,果然是1;

cpp 复制代码
// 查看当前配置值
cat /proc/sys/kernel/yama/ptrace_scope

// 临时开启
echo 0 > /proc/sys/kernel/yama/ptrace_scope

// 永久开启
在/etc/sysctl.d/10-ptrace.conf文件中,添加或修改
kernel.yama.ptrace_scope = 0

谨慎起见,先使用临时开启方案测试一下,执行命令,提示权限不够;

cpp 复制代码
ubuntu-178:~/xxx$ echo 0 > /proc/sys/kernel/yama/ptrace_scope

bash:/proc/sys/kernel/yama/ptrace_scope:权限不够

于是执行sudo!!,依然提示权限不够(给我整无语了);

cpp 复制代码
ubuntu-178:~/xxx$ sudo!!

sudo echo 0 > /proc/sys/kernel/yama/ptrace_scope
bash:/proc/sys/kernel/yama/ptrace_scope:权限不够

简单看了一圈,只能使用永久开启方案试一试了;

cpp 复制代码
ubuntu-178:~/xxx$ vim /etc/sysctl.d/10-ptrace.conf

##xxxxxxxxxxxxxxxxxx##
##xxxxxxxxxxxxxxxxxx##
kernel.yama.ptrace_scope = 0

vim打开文件,修改了值,wq保存退出是提示E505:"/etc/sysctl.d/10-ptrace.conf"是只读文件,使用!强制覆盖 ,于是wq!保存退出,依然不行,提示E212:"/etc/sysctl.d/10-ptrace.conf"无法打开并写入文件。这下我要抑郁了。

使用sudo打开文件试一试。

cpp 复制代码
ubuntu-178:~/xxx$ sudo vim /etc/sysctl.d/10-ptrace.conf

##xxxxxxxxxxxxxxxxxx##
##xxxxxxxxxxxxxxxxxx##
kernel.yama.ptrace_scope = 0

ohyes,修改保存成功。make clean & make重新编译运行看看效果。

失败!!ptrace(PTRACE_ATTACH, pid,...)调用依然失败,errno依然为1,又回到了问题的起点。

想了一下,有没有可能运行demo也需要超级权限?去试试。。

我去还真是,demo终于能跑了,成功追踪到指定进程!!!

回溯一下,会不会上面的过程只是绕了一个大圈,也许根本不需要修改ptrace-scope的值呢?再去试试。。

哈哈哈哈哈哈,我把ptrace-scope的值改回去了,再重新使用sudo跑一遍demo,你猜怎么着?运行成功,跟踪并打印了pid指定进程的调用栈信息!

结束!

总结:

以上过程就是一个圈,答案就在起点,但你必须躬身跑完整个圈,才能发现原来起点就是答案。生活也是,躬身入局,没有一步是枉徒,skin in the game!!

相关推荐
生信大表哥5 小时前
单细胞测序分析(五)降维聚类&数据整合
linux·python·聚类·数信院生信服务器
“αβ”5 小时前
MySQL表的操作
linux·网络·数据库·c++·网络协议·mysql·https
神秘的土鸡6 小时前
openEuler 25.09 企业级 MySQL主从复制部署与性能优化实战提升50%
linux·数据库·mysql·性能优化·openeuler
知识分享小能手6 小时前
CentOS Stream 9入门学习教程,从入门到精通, CentOS Stream 9 命令行基础 —语法知识点与实战详解(4)
linux·学习·centos
烤鱼骑不快7 小时前
linux 软Raid
linux
hhwyqwqhhwy7 小时前
Linux file->private
linux·运维·服务器
WongKyunban7 小时前
在Linux下制作软件安装包
linux·运维·服务器
IT 乔峰8 小时前
Centos7中部署DNS服务器
linux
hweiyu008 小时前
Linux 命令:parted
linux·运维·服务器
搞全栈小苏8 小时前
Linux下 cmake所有版本适用/下载编译使用教程 附cmake3.26安装包
linux·运维·ubuntu