C 如何在需要超级用户权限的程序上运行Valgrind?

C 如何在需要超级用户权限的程序上运行Valgrind?,c,valgrind,sudo,C,Valgrind,Sudo,我正在用C编写一个包嗅探器(使用libpcap),我不能使用Valgrind在我的程序中查找内存泄漏,因为它必须以超级用户权限运行,因为没有它,我甚至无法打开网络接口进行捕获 当我尝试使用sudo运行Valgrind时,我得到了以下结果: $ valgrind sudo ./[exec] ==5211== ==5211== Warning: Can't execute setuid/setgid/setcap executable: /usr/bin/sudo ==5211== Possibl

我正在用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
# valgrind ./[exec]
valgrind: ./bin/TP2: Permission denied
所以我试着以超级用户的身份运行(
sudo su
),得到了以下结果:

$ 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
# valgrind ./[exec]
valgrind: ./bin/TP2: Permission denied
以及:

$ sudo valgrind ./[exec]
valgrind: ./bin/TP2: Permission denied
我搜索了所有的互联网,想找到答案


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

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


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

为什么使用混合表示法:您运行
/[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可以澄清