2017-08-08 17 views
0

私は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 

私はすべてのインターネットを検索して答えを見つけました。要するに、私はパケットスニッファでメモリリークを発見する必要があり、管理者権限で実行する必要があります。誰かが私にそれを手伝ったり、少なくとも私に別のメモリチェッカーを勧めてもらえますか?

+0

なぜ混在表記を使用していますか: './ [exec]'を実行しても、エラーメッセージに '。/ bin/TP2'を表示します。どこでも '。/ TP2'を使うなど、自己一貫性を保つ方が良いでしょう。 –

+0

プログラムは 'nosuid'オプションでマウントされたファイルシステムに保存されていますか?プログラムのパーミッションに 'x'ビットが設定されていますか? rootでもプログラムを実行するには 'x'ビットが必要です。ディレクトリのアクセス許可は何ですか?適切なEPERM(権限なし、または「操作が許可されていません」)エラーを取得して、自分自身で './ [exec]'を実行できますか? –

+0

@JonathanLeffler私はValgrindがプログラムの 'suid'について不平を言っているとは思っていませんが、' sudo'のためです。 'sudo'は通常binの中にあり、そのためのファイルシステムには' nosuid 'はありません。 –

答えて

1

解決策が見つかりました。私は実行可能ファイルが置かれているボリュームがNTFSパーティションであるため、問題があるという手がかりはありませんでした。最初にファイルをEx4パーティションのランダムなフォルダに移動したので、実行可能ファイルのアクセス許可をchmodに変更しました。

これで、rootとしてログインしたときにプログラムでValgrindを実行できます。

関連する問題