【发布时间】: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,而是抱怨sudo。sudo通常在 bin 内,而文件系统不会有nosuid。 -
@AjayBrahmakshatriya:你可能是对的。我正在尝试从 OP 获取有关权限的更多信息,因为尚不清楚为什么 Valgrind 无法执行
./bin/TP2(根据错误消息)或./[exec](根据命令行应该生成消息参考./bin/TP2)。大多数情况下,超级用户可以执行程序——所以看到权限被拒绝有点出乎意料。问题是“设置有什么特别之处,导致程序无法运行”。 -
@JonathanLeffler 是的,
./[exec]似乎有点好笑,因为它只会匹配文件e、x和c而不是/bin/TP2。我认为只有 OP 可以澄清