2009-05-14 15 views
31

プロセスによって行われた特定のシステムコール、主にI/Oコールのファイルを監視できます。 Linuxでは、適切なパラメータを使ってstraceを使用することができますが、Windowsではどうしたらいいですか?Windowsでプロセスによって実行された特定のシステムコールの監視

私は、プロセスを実行し、読み書きしたファイルを調べることに主に関心があります。

EDIT:これを別のプロセスからプログラムで実行します。私はProcessMonitorを認識していますが、私はさらなる分析のために別のプログラムにインポートできる形式でデータを受け取りたいと思います。

編集:私はさらに私の要件を絞り込む場合は、)おそらくのCreateFile(への呼び出しを監視することができるように十分です。私は実際には、どのファイルが開かれているか、読み書き用に開かれているのか、読まれたのかだけに興味があります。私が本当に述べていない別の要件は、の速度がかなり重要であるということです。私はC++ファイルをコンパイルするようなことをする予定でしたし、20MBのログファイルを生成する完全なGUIをプルアップするにはかなりのオーバーヘッドがあります。

EDIT:管理者権限を必要としない場合は、いいかもしれません。

+0

興味深い呼び出します。 Windowsのlinux ptraceシステムコールに似たものはありませんか?すべての答えは他のプログラムを使用することですが、ptrace()のようなものを使用すると、あなたはそれをあなたの棚にすることができます。 – ktulur

+1

異なるアプローチに興味がある場合は、ptraceに相当するウィンドウについて質問しました:http://stackoverflow.com/questions/865106/is-there-something-like-linux-ptrace-syscall-in- windows – ktulur

答えて

22

Windowsにはいくつかのオプションがあります。

Windows Performance Toolkitは、ファイルI/Oを含む様々なシステムイベントのトレースを可能にするために使用され、処理及びこれらのイベントを表示するためのツールを含むことができます。 xperfを使用すると、さまざまな種類のイベントのトレースを開始し、後で同じツールを使用して処理または表示できるETLファイルに保存できます。

Process Monitor from SysInternalsは、非常に使いやすいオプションで、システム上のすべてのプロセスが実行しているすべてのファイルとレジストリへのアクセスをすばやく確認できます。 http://blogs.msdn.com/carloc/archive/2008/10/31/how-to-automate-process-monitor.aspxはプロセスモニタを自動化された方法で実行する方法も示しています。

あなたは完全にプログラムでこれを行うしたい場合は、ファイルI/Oイベントをスナップし、ETLファイルに保存するETW機能(などStartTrace、ENABLETRACEを、)を使用することができます。サンプルコードhere

+0

ありがとう、私はWPTを見ていきます。 ProcessMonitorはGUIなしで実行するためのサポートはありますか? – JesperE

+0

Process Monitorの自動化の方法を示すリンクが表示されます。 – Michael

+0

1.3GB(!)のiso-imageをダウンロードせずにxperfツールセットを入手する方法はありますか? – JesperE

5

Windowsでは、プロセス・アクティビティ(IOとレジストリ)を監視するためにprocess monitorを使用することができます。あなたが本当にシステムコールを知りたくない場合は、これがあなたの必要に合っていると思います。

そして、あなたは、API呼び出しを監視するためにwinapioverride32を使用することができます。

2

FileMon

NtTraceは、straceのと同様に、もあります。

+1

プロセスモニタは、FileMonの後継製品です。 SysInternalsの人々は、FileMonとRegMonをProcess Monitorに統合しました。 – Michael

+0

私のVista x64では、 "間違った署名をトラップできません"というNtTraceが失敗します。しかし、それは2007年以来更新されていません。 – JesperE

2

ツールのトレース別のWindows API:logexts.dllDebugging Tools for Windowsの一部)、WinDbgを/ NTSD/CDBの内側からまたはスタンドアロンlogger.exeプログラムを介して実行することができます。

-4

どのように誰も言及しなかったstrace?出力例:

open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3 
fstat64(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 
fcntl64(3, F_GETFD)      = 0x1 (flags FD_CLOEXEC) 
getdents64(3, /* 18 entries */, 4096) = 496 
getdents64(3, /* 0 entries */, 4096) = 0 
close(3)        = 0 
fstat64(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f2c000 
write(1, "autofs\nbackups\ncache\nflexlm\ngames"..., 86autofsA
+6

質問は "Linuxではおそらくstraceを使用して立ち去ることができます" ... – RichieHindle

+0

ああおっと:) –

+0

@mattとにかく、[strace in cygwin](http://cygwin.com/cygwin) -ug-net/using-utils.html)。 – artistoex

2

もう一つの方法は、Deviare API Hook、すべてのユーザ・モード・システムは、あなたがしたいことを呼び出すインターセプトを使用することです。このフレームワークを使用すると、COMインターフェイスを使用してパラメータを読み取ることができるため、すべての呼び出しに対して汎用ハンドラをコーディングできます(各パラメータはINktParamで、INktParam.Valueを使用して値を取得できます)。

もう1つの選択肢がありますが、同じ会社のSpyStudioを使用すると多額の費用がかかります。この製品にはGUIなしでログを収集するのに便利なコマンドラインオプションがあります。 rohitabによって

関連する問題