【问题标题】:How do I run Valgrind on a program that needs superuser permission?如何在需要超级用户权限的程序上运行 Valgrind?
【发布时间】:2017-08-08 02:57:19
【问题描述】:

我正在用 C 语言编写一个数据包嗅探器(使用 libpcap),我不能使用 Valgrind 来查找我的程序中的内存泄漏,因为它必须以超级用户权限运行,因为没有这个,我什至无法打开用于捕获的网络接口。

当我尝试使用 sudo 运行 Valgrind 时,我得到了这个:

$ valgrind sudo ./[exec]
==5211== 
==5211== Warning: Can't execute setuid/setgid/setcap executable: /usr/bin/sudo
==5211== Possible workaround: remove --trace-children=yes, if in effect
==5211== 
valgrind: /usr/bin/sudo: Permission denied

所以我尝试以超级用户 (sudo su) 身份运行并得到了这个:

# valgrind ./[exec]
valgrind: ./bin/TP2: Permission denied

还有:

$ sudo valgrind ./[exec]
valgrind: ./bin/TP2: Permission denied

我已经搜索了整个互联网以找到答案。

简而言之,我需要在我的数据包嗅探器中找到内存泄漏,并且它必须以管理员权限运行。有人可以帮我解决这个问题,或者至少,请给我推荐另一个内存检查器吗?

【问题讨论】:

  • 你为什么使用混合符号:你运行./[exec],却在错误消息中得到./bin/TP2。你最好是自洽的,比如到处使用./TP2
  • 程序是否存储在使用nosuid 选项挂载的文件系统上?该程序是否在其权限上设置了x 位?即使是 root 也需要一个 x 位来运行程序。目录的权限是什么?你能以自己的身份运行./[exec],得到适当的 EPERM(无权限,或“不允许操作”)错误吗?
  • @JonathanLeffler 我不认为 Valgrind 抱怨该程序的suid,而是抱怨sudosudo 通常在 bin 内,而文件系统不会有 nosuid
  • @AjayBrahmakshatriya:你可能是对的。我正在尝试从 OP 获取有关权限的更多信息,因为尚不清楚为什么 Valgrind 无法执行 ./bin/TP2 (根据错误消息)或 ./[exec] (根据命令行应该生成消息参考./bin/TP2)。大多数情况下,超级用户可以执行程序——所以看到权限被拒绝有点出乎意料。问题是“设置有什么特别之处,导致程序无法运行”。
  • @JonathanLeffler 是的,./[exec] 似乎有点好笑,因为它只会匹配文件exc 而不是/bin/TP2。我认为只有 OP 可以澄清

标签: c valgrind sudo


【解决方案1】:

我找到了解决方案。我不知道问题是因为我的可执行文件所在的卷是 NTFS 分区。首先,我将文件移动到 Ex4 分区上的一个随机文件夹,因此,我使用 chmod 更改了我的可执行文件的权限。

现在我可以在以 root 身份登录时在我的程序上运行 Valgrind。

【讨论】:

    猜你喜欢
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 2020-04-26
    • 1970-01-01
    相关资源
    最近更新 更多