0
我正在用C编写一个数据包嗅探器(使用libpcap),我不能使用Valgrind在我的程序中查找内存泄漏,因为它必须以超级用户权限运行,因为如果没有这个,我甚至不能打开网络接口进行捕获。如何在需要超级用户权限的程序上运行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'。 –