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);