4

strace pwd:

getcwd("/root"..., 4096)                = 6

ltrace pwd:

getcwd(NULL, 0)                                     = "/root"

第 1 パラメータがNULLにあるのはなぜltraceですか?

strace/ltrace はどちらもシステムコールを使用してptraceいるようですが、なぜ異なる情報を取得するのでしょうか?

4

3 に答える 3

4

そうです、どちらも を使用しptrace、異なる情報を取得します。使い方がptrace違うからです。

ptrace のman ページを見ると、ptrace の動作を決定する「要求」値がいくつか存在することがわかります。

より具体的には、 を使用ptraceして事前にオプションPTRACE_O_TRACESYSGOODを設定すると、システム コールにつながるトラップとシステム コールにつながらないトラップを区別する方法が得られます。

于 2012-11-10T18:29:35.507 に答える
2

システムコールとライブラリコールが違うからです。getcwd 関数のマンページを読むと、次のプロトタイプがあることがわかります。

long getcwd(char *buf, unsigned long size);
于 2011-06-23T12:28:40.107 に答える