1

コマンド (/bin/ls など) によって実行されるすべてのシステム コールを一覧表示するプログラムを作成しました。今私がやろうとしているのは、それに渡される可能性のあるすべてのシステムコール引数、環境変数、コマンドライン引数を見つけることです

例:ファイルを開いた場合。システムコール sys_access はファイルを正しく開きますか? しかし、これらの値を取得する方法は?
open、read、write、close などのシステム コールに対してこれを行いたい。

私の調査によると、これらはレジスタ (ebx - edx) にある必要があります。そうであれば、これらのレジスタ値は何を意味しますか? このリンクを取得しました。
しかし、私はそこから多くを得ることができませんでした。また、これに関するその他の参考文献は非常に役立ちます。

4

1 に答える 1

0

(上記のコメントの改訂版 (受け入れられるように)):

詳細な syscall パラメーターは、Linux カーネル ヘッダーsyscalls.hで検索できます。上記の場合、sys_access (x86 では #33) には 2 つのパラメーターしかないため、次のようになります。

  • 最初はファイル名へのポインターであるため、ファイル名はアドレス 0x4c4d8e に保存されました
  • 2 番目のパラメーターはファイル モードです (モード フラグの定義を参照)。
  • この syscall には 3 番目のパラメーターがないため、edx は関係なく、未定義の値が含まれています

この syscall の戻り値は -2 (ENOENT、errno-base.hで定義) で、エラー (そのようなファイルやディレクトリがない) を示します。

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

于 2012-03-19T21:13:26.727 に答える