6

mprotectの Linux man ページによると、関数には 3 つの引数があります。

int mprotect(const void *addr, size_t len, int prot);

しかし、私が分析しているプログラムで ltrace を実行しているときに、mprotect が次のように呼び出されていることがわかります。

mprotect(0x8049000, 4096, 3, 1, 0xb7e057ac)      = 0

4番目と5番目の引数は何ですか?

ltrace バージョン 0.5 を使用しています。およびカーネル 2.6.24-24-generic

4

1 に答える 1

7

5は、構成ファイルで関数の説明が見つからない場合にltraceが出力する引数の数です。(デフォルトでは/etc/ltrace.confだと思います)。

私のシステムでは同じ動作を見ることができますが、mprotectはそこにはなく、SYS_mprotectのみが見つかります。

ltraceソースをもう一度確認したい場合、関心のある場所はoutput.cで、「func = name2func(function_name);」の後の条件付きです。-これは、関数名のメタ情報が見つからない場合に5つの引数を出力します(この場合、name2func内の線形ルックアップはNULLを返します)。

したがって、マニュアルは正しく、「間違っている」のはltraceです(技術的にはコードが正常に機能するため、「間違っている」と引用されていますが、おそらく構成の定義を修正する必要があります)

于 2009-10-27T22:07:51.167 に答える