0

ptrace私のプログラムでは、同じプロセス内のユーザー レベルですべてのシステム コールをインターセプトしたいと考えています ( のような別のプロセスや のようなツールを使用したくありませんstrace)。また、LD_PRELOAD も使用したくありません。どうやってやるの?

4

1 に答える 1

4

Cマクロを使用します。それはこのように動作します:

  1. 追跡する各システムコールのマクロを定義するヘッダーファイルを作成します。例:open()

    #define open(path,flags,mode)  mySpecialOpen(path,flags,mode)
    
  2. mySpecial*()呼び出しをsyscallに転送する関数を含むライブラリを作成します。ヘッダーファイルなしでライブラリをコンパイルします。

  3. 上記のヘッダーファイルを使用して、コード(および使用するすべてのライブラリ)をコンパイルします。ライブラリとリンクします。

于 2012-05-09T12:11:21.070 に答える