2017-08-08 32 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。

相關問題