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