2012-03-19 10 views
1

私はコマンドで実行されたすべてのシステムコール(例えば/ bin/ls)をリストするプログラムを書いています。私は、ファイルを開く場合:今、私は何をしようとしていることは、それは
ptraceを使ったシステムコールのトレース

例に渡されるすべてのシステムコールの引数、環境変数、コマンドライン引数を見つけることです。システムコールsys_accessはファイルを正しく開きますか?しかし、どのようにこれらの価値を得るために?
open、read、write、closeのようなシステムコールに対してこれをしたい。

私の研究によれば、これらはレジスタになければなりません(ebx - edx)もしそうなら、これらのレジスタ値は何を意味していますか? 私はこれを持っていますlink
しかし、私は本当にそこから多くを得ることができませんでした。これについてのこれ以上の参考文献は多くの役に立ちます。

+1

これは役立ちますか?http://lxr.free-electrons.com/source/include/linux/syscalls.h – dbrank0

+0

@ dbrank0:ありがとうございます。本当に助けになるのです。しかしもう一つ質問があります。 EBX:004c48de ECX:00000000 EDX:004c8ff4 /アクセス RETURN 33:この中 値は六角にあるFFFFFFFE私の以前のプログラムの 出力はこの 'code'SYSCALL 33のようなものです。それで私はどのようにそれを理解していますか?私はnoobプログラマーです。私の知らないうちに申し訳ありません –

+1

ファイル名は0x4c48deに保存されています。モードは0です(モードフラグが定義されている参照)。edxは関連しておらず、何も定義されておらず、戻り値は-2です(読み込み専用ファイルシステムについて不平を言います)。 – dbrank0

答えて

0

((あなたがそれを受け入れることができます)上記のコメントの改訂形):

詳細なシステムコールのパラメータは、Linuxカーネルヘッダsyscalls.hで検索することができます。上記の場合 は、sys_access(x86版#33)2つのパラメータのみがあるよう:あなたのファイル名がアドレス0x4c4d8eで保存したので、

  • 最初のファイル名へのポインタがあるの
  • 2番目のパラメータはファイルモードである(参照このシステムコールへの第三のパラメータが存在しないようにモードフラグが)
  • を定義し、EDXは関連していないと、いくつかの不定値にこのシステムコールの

戻り値を含む-2(ENOENT、errno-base.hで定義されている)、これが意味エラー(そのようなファイルやディレクトリはありません)。

straceユーティリティの機能を複製していることにも注意してください(上記のBasileのコメントを参照)。

+0

もう一度ありがとう。私はptraceでそれをやろうとしていたので、それを学ぶことができます。 Bt is not ptraceはCで使うのがよりフレンドリーですか?私はpeekuser、getregsとすべてが楽しいことを意味します。 :D –

+0

あなたのスケジュールがそれで遊ぶことができるのは楽しいことです。 :) – dbrank0

関連する問題