2

私は現在、カスタム コア フォーマットを使用するクラッシュ コレクション メカニズムを開発しています。要するに、これは linux_binfmt->core_dump エントリーをフックして、ダンパーを指すようにします。

ダンパー自体は、プロセスの PID を使用してユーザーモード ヘルパーを起動し、カーネルがプロセスを完全に強制終了できるようにする前に、ptrace を介してプロセス情報をダンプします。

call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC);

私の問題は、タスクが技術的にディスクのスリープ状態にあり、停止していないため、ptrace 呼び出しが失敗することです。

私は無駄に SIGSTOP を SEND_SIG_FORCED しようとしました:

send_sig_info(SIGSTOP, SEND_SIG_FORCED, current);

プロセスの終了を引き続きブロックするが、プロセスを停止状態にして ptrace ユーザーモード コレクターを機能させる方法についてのアドバイスをいただければ幸いです。

4

1 に答える 1

1

ptrace でチェックするいくつかの矛盾したフラグが原因の一部である解決策を見つけました:

printk(KERN_INFO "%s Launching usermode helper for %d\n", __FUNCTION__, current->pid);

call_usermodehelper(argv[0], argv, envp, UMH_NO_WAIT);
set_current_state(TASK_UNINTERRUPTIBLE | TASK_TRACED);
schedule();

printk(KERN_INFO "%s user-mode helper done! killing pid %d\n", __FUNCTION__, current->pid);

これにより、タスクがトレース スリープ状態になり、ヘルパーがタスクにアタッチできるようになります。

于 2014-01-30T18:10:56.300 に答える