copyinto
指定されたユーザー・アドレスからDTraceスクラッチ・バッファにバイト単位で指定されたサイズをコピーして、バッファ・アドレスを返します。
void copyinto(uintptr_t addr, size_t size, void dest)
copyinto
関数は、指定されたユーザー・アドレス(addr)から指定されたDTraceスクラッチ・バッファ(dest)に、指定されたサイズ(size)をコピーします。ユーザー・アドレスは、現在のスレッドに関連付けられたプロセスの空間内のアドレスとして解釈されます。指定されたアドレスは、現在のプロセス内のフォルト・インのページに対応している必要があります。アドレスがフォルト・インのページに対応していない場合や、コピー先のメモリーの一部がスクラッチ・メモリー内にない場合、コピーは行われず、エラーが生成されます。
例7-9 システム書込みコールからのデータを割り当てられたメモリー・バッファにコピーするためにcopyintoを使用する方法
この例では、プローブが書込みシステム・コールのエントリ・ポイントに設定されています。述語は、プロセスexecnameがpodman
アプリケーションと一致したときにフィルタするように設定されています。copyinto
関数は、書込みコールの最初の引数arg1
の32バイトを、32バイトの割り当てられたメモリー・バッファへのポインタptr
にコピーするために使用されます。このスクリプトは、podman
アプリケーションがシステム書込みコールを行うときに、ptr
の文字列表現を出力します。
syscall::write:entry
/execname=="podman"/
{
ptr = (char *)alloca(32);
copyinto(arg1, 32, ptr);
printf("'%s'", stringof(ptr));
}