首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当试图将GDB附加到进程时,如何解决“不允许的ptrace操作”?

当试图将GDB附加到进程时,如何解决“不允许的ptrace操作”?
EN

Stack Overflow用户
提问于 2013-10-06 23:31:43
回答 15查看 137.1K关注 0票数 124

我试图用gdb附加一个程序,但它返回:

附加到进程29139 无法附加到进程。如果您的uid与目标进程的uid匹配,请检查/proc/sys/scope/yama/ptrace的设置,或者作为根用户再试一次。有关更多细节,请参见/etc/sysctl.d/10-ptrace.conf 不允许操作。

gdb-调试器返回“未能附加到进程,请检查特权,然后再试一次。”

strace返回“附加: ptrace(PTRACE_ATTACH,.):不允许的操作”

我将"kernel.yama.ptrace_scope“1改为0,将/proc/sys/kernel/yama/ptrace_scope 1更改为0,并使用以下方法尝试了set environment LD_PRELOAD=./ptrace.so

代码语言:javascript
运行
复制
#include <stdio.h>
int ptrace(int i, int j, int k, int l) {
    printf(" ptrace(%i, %i, %i, %i), returning -1\n", i, j, k, l);
    return 0;
}

但它仍然返回相同的错误。如何将其附加到调试器?

EN

回答 15

Stack Overflow用户

发布于 2017-10-10 22:16:36

如果您使用的是Docker,您可能需要以下选项:

代码语言:javascript
运行
复制
docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined

如果您正在使用Podman,您可能也需要它的--cap-add选项:

代码语言:javascript
运行
复制
podman run --cap-add=SYS_PTRACE
票数 235
EN

Stack Overflow用户

发布于 2015-08-28 15:28:57

这是由于Linux内核增强所致;您可以通过echo 0 > /proc/sys/kernel/yama/ptrace_scope或在/etc/sysctl.d/10-ptrace.conf中修改此行为来禁用此行为。

还请参阅这篇文章发表在Fedora 22。 (有指向文档的链接)和这条关于Ubuntu的评论帖子以及。

票数 90
EN

Stack Overflow用户

发布于 2018-10-06 21:40:34

我想补充的是,我需要--security-opt apparmor=unconfined以及@睿智提到的选项。这是在Ubuntu18.04( Docker客户端和主机)上。因此,在容器中启用gdb调试的完整调用是:

docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --security-opt apparmor=unconfined

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19215177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档