copyinstr
指定されたユーザー・アドレスからDTraceバッファにNULL終端のC文字列をコピーして、バッファのアドレスを返します。
string copyinstr(uintptr_t addr [, size_t size])
copyinstr
関数は、指定されたユーザー・アドレスからDTraceスクラッチ・バッファにNULL終端のC文字列をコピーして、このバッファのアドレスを返します。ユーザー・アドレスは、現在のスレッドに関連付けられたプロセスの空間内のアドレスとして解釈されます。オプションの最大長パラメータでは、アドレスを超えて検査されるバイト数の制限を設定します。結果の文字列は常にNULL終端されていて、その文字列の長さはコンパイラとランタイムのstrsize
オプションで設定した値に制限されます。copyin
関数と同様に、指定されたアドレスは現在のプロセス内でフォルト・インされたページに対応している必要があります。アドレスがフォルト・インされたページに対応していない場合や、使用できるスクラッチ・メモリーが不足している場合は、NULLが返され、エラーが生成されます。
例7-8 プロセスのアドレス空間からDTraceバッファに文字列をコピーするためにcopyinstrを使用する方法
この例では、プローブが書込みシステム・コールのエントリ・ポイントに設定されています。述語は、プロセスexecnameがpasswd
アプリケーションと一致したときにフィルタするように設定されています。copyinstr
関数は、書込みコールの最初の引数arg1
をprintf
で出力される文字列にコピーするために使用されます。このスクリプトは、パスワードのリセットにpasswd
アプリケーションが使用されたときに、システム書込みコールの引数を出力します。
syscall::write:entry
/execname=="passwd"/
{
printf("%s", copyinstr(arg1));
}