strace pwd:
getcwd("/root"..., 4096) = 6
ltrace pwd:
getcwd(NULL, 0) = "/root"
第 1 パラメータがNULLにあるのはなぜltraceですか?
strace/ltrace はどちらもシステムコールを使用してptraceいるようですが、なぜ異なる情報を取得するのでしょうか?
そうです、どちらも を使用しptrace、異なる情報を取得します。使い方がptrace違うからです。
ptrace のman ページを見ると、ptrace の動作を決定する「要求」値がいくつか存在することがわかります。
より具体的には、 を使用ptraceして事前にオプションPTRACE_O_TRACESYSGOODを設定すると、システム コールにつながるトラップとシステム コールにつながらないトラップを区別する方法が得られます。
システムコールとライブラリコールが違うからです。getcwd 関数のマンページを読むと、次のプロトタイプがあることがわかります。
long getcwd(char *buf, unsigned long size);