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'。 –