2017-05-21 7 views
0

ファイルアクセス権を持つログファイルを作成するプロセスがあります。644しかし、LD_PRELOADを使用して特定の共有オブジェクトライブラリをロードするプロセスを実行すると、ファイルアクセス権は2101に設定されます設定されています)。プロセスを作成するプログラムのソースコードはありませんが、.soファイルのソースコードがあります。ファイルのアクセス許可は、.soファイルがロードされた結果であることを確かに知っています。ファイルを作成するプログラムの.soファイルをロードすると、ファイルのアクセス許可にsetuid/setgidビットが設定されるためです。私が書いたプログラムにgdbを使ってみましたが、コードをステップ実行することができません。 gdbを使ってロードされた.soファイルでプログラムを起動すると、セグメント違反エラーが発生します。この問題のトラブルシューティングはどのように行うべきですか? .soファイルのソースコードにファイルアクセス許可が設定されていません。間違ったファイルアクセス許可のトラブルシューティング

#include <stdio.h> 

int main(){ 
    printf(" This is my program"); 
    system("touch /tmp/myfile.txt"); 

    return(0); 
} 

答えて

0

私は.soのファイルのソースコードに設定されているすべてのファイルのアクセス権が表示されない - 私が書いたプログラムが、それは次のようになり、非常に簡単です。

.soは、openを挿入しますか?

int open(const char *fname, int flags) 
{ 
    ... do whatever 
    return real_open(fname, flags); // problem: omits 3rd argument to open 
            // and passes "garbage" permissions when 
            // O_CREATE is in flags. 
} 

私は、セグメンテーションフォールトエラー私は.soが使用してプログラムを起動した瞬間を得る:「ランダム」パーミッションでファイルを作成するための

一つの方法は、(間違って)ので、同じようopenを介在させることですgdbを使用してロードされたファイル。

GDBがプログラムを実行するときには、$SHELL(任意の入出力リダイレクションを処理するため)を呼び出します。あなたのシェルは、openが間違って挿入されているようには思わないでしょう。

+0

うわー!!!ありがとうER – user4002112

+0

ちょうどもう1つの明確化、介入を行う正しい方法は、ラッパー関数を記述することでしょうか? – user4002112

+0

@ user4002112あなたが何を求めているのか分かりません。インターポーザを書く場合は、*正しく書く必要があります*。 'open'の場合、2つではなく3つの引数が必要です。 –