2017-08-08 181 views
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 

我已经搜索了所有的互联网找到答案。

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

+0

为什么使用混合符号:您运行'./ [exec]',但在错误消息中获得了'。bin/TP2'。你最好是自我一致,比如在每个地方使用'。/ TP2'。 –

+0

程序是否存储在安装有'nosuid'选项的文件系统上?程序是否在其权限上设置了“x”位?即使是root也需要一个'x'位来运行一个程序。目录的权限是什么?你可以运行'./ [exec]'作为你自己,得到一个合适的EPERM(没有权限,或'不允许操作')错误吗? –

+0

@JonathanLeffler我不认为Valgrind正在抱怨程序的'suid',但是'sudo'。 'sudo'通常在bin内,而文件系统不会有'nosuid'。 –

回答

1

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

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

相关问题