を返します。のprintfが、私はそうのように、KEXTを使ってOS Xでのシステムコールをログに記録しています不正な形式の出力
int hook_read(struct proc *p, struct read_args *u, user_ssize_t *r) {
/* get som params here... */
printf("[IDEN] SYS_read called, %s, %d, %d, %d.\n", params);
return read(p, u, r);
}
これはsystem.log
に記録します。問題は、printf
の負荷が高い(多くのシステムコールが呼び出された)場合、system.log
の出力は、多くの場合、たとえば ID]SYS_readEN] callparam, 123, ed 123, 123
の形式で出力されます。文字列がスクランブルされています。シリアルポートに印刷するkprintf
を使用すると、不正な形式のログは決して発生しません。
この現象の原因は何ですか?
ありがとうございました。これは調査目的に過ぎないため、パフォーマンスは問題ではありません。だから私は 'kprintf'を使う必要があります。 2台のマシン/ VMを使用せずに 'kprintf'出力を何とか取得できますか?理想的には、kprintf出力をログファイルに書きたいと思います... – Joseph
私が知っている限り、kprintfはシリアルポート(主にVMの場合は最近のところ便利です)やFireWireでしか使用できません。 printfを使用する代わりに、IOSharedDataQueueまたはカーネル制御ソケットを使用して、カスタムユーザー空間ロギングシステムを構築できます。 – pmdj