【问题标题】:PTRACE_ATTACH not permitted forPTRACE_ATTACH 不允许用于
【发布时间】:2013-08-24 11:56:15
【问题描述】:

由于某种原因,我无法附加到我自己的进程?!如果我以 root 身份尝试strace,效果很好。

$ ./list8 &
[1] 3141
$ child4 starts...

$ strace -p 3141
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
Could not attach to process.  If your uid matches the uid of the target
process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try
again as the root user.  For more details, see /etc/sysctl.d/10-ptrace.conf
$ cat /proc/sys/kernel/yama/ptrace_scope
1

在 lubuntu 13.10 上运行

Linux goal 3.8.0-19-generic #29-Ubuntu SMP Wed Apr 17 18:19:42 UTC 2013 i686 i686 i686 GNU/Linux

那么gdb 是如何附加到用户自己的进程而不必乱搞内核设置的(ptrace_scope)??

【问题讨论】:

标签: c linux process ptrace


【解决方案1】:

看起来您回答了自己的问题——您已将 ptrace_scope 设置为 1,因此您只能跟踪直接子代。要允许跟踪属于同一用户的任何进程,请将其设置为 0。这也是使用 gdb attach 命令所必需的。

按照您的错误消息建议阅读 /etc/sysctl.d/10-ptrace.conf 文件...

【讨论】:

  • 你是对的,gdb 在这个新的 lubuntu 中默认也不起作用!如何从 C 创建一个直接的孩子? execl() 似乎不起作用 - 在 PTRACE_ATTACH 上出现错误
  • @user2705045: fork 创建一个孩子。将 ptrace_scope 设置为 1,您只能附加到您直接分叉的孩子(不是孙子或兄弟姐妹)
【解决方案2】:

如果这以 root 身份失败,我在跟踪启蒙 (e17) 时遇到问题,原因是您无法跟踪已经在 gdb 下运行或运行的进程,某些程序会这样做,以便他们可以自己获取调试信息。

【讨论】:

    【解决方案3】:

    如果 strace 以 root 身份失败,请尝试检查... gdbstrace 是否没有在后台运行(这是我的情况)。

    命令:ps aux | grep "gdb\|strace"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-17
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      相关资源
      最近更新 更多