私はCでパケットスニッファーを書いています(libpcapを使用しています)。これはスーパーユーザの権限で実行する必要があるため、Valgrindを使用してメモリリークを見つけることはできません。キャプチャのためのネットワークインターフェイス。スーパーユーザー権限が必要なプログラムでValgrindを実行するにはどうすればよいですか?
私はsudo
でValgrindのを実行しようとすると、私はこれだ:だから私は(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
私はすべてのインターネットを検索して答えを見つけました。要するに、私はパケットスニッファでメモリリークを発見する必要があり、管理者権限で実行する必要があります。誰かが私にそれを手伝ったり、少なくとも私に別のメモリチェッカーを勧めてもらえますか?
なぜ混在表記を使用していますか: './ [exec]'を実行しても、エラーメッセージに '。/ bin/TP2'を表示します。どこでも '。/ TP2'を使うなど、自己一貫性を保つ方が良いでしょう。 –
プログラムは 'nosuid'オプションでマウントされたファイルシステムに保存されていますか?プログラムのパーミッションに 'x'ビットが設定されていますか? rootでもプログラムを実行するには 'x'ビットが必要です。ディレクトリのアクセス許可は何ですか?適切なEPERM(権限なし、または「操作が許可されていません」)エラーを取得して、自分自身で './ [exec]'を実行できますか? –
@JonathanLeffler私はValgrindがプログラムの 'suid'について不平を言っているとは思っていませんが、' sudo'のためです。 'sudo'は通常binの中にあり、そのためのファイルシステムには' nosuid 'はありません。 –