fork()
システムコールがオーバーロードされ、RTLD_NEXTを使用してfork()
という独自のバージョンを作成しました。つまり、dlsym(RTLD_NEXT, fork)
です。これは私のフォークバージョンに当たるでしょう。この後、私は実際のfork()
システムコールのタスクを再現したい、つまり、子プロセスを作成してpidを返すことと、さらにいくつかの追加機能を作りたいと思います。fork()のオーバーロード
私はそれを行う方法を理解することができません。 fork()
(fork.c)のカーネルソースコードを調べたところ、それほど分かりませんでした。
は、これを行う:
dlsym(RTLD_NEXT,fork);
int fork(void) {
int pid=_fork(); // Trying to call actual fork does not work
return pid;
}
はどのように私はそれを行うことができますか? (コメントから引き込ま)http://lxr.linux.no/linux+v2.6.32/kernel/fork.c#L10
編集:ここではフォークのソースコードをカーネルにリンクされ
私はツールを検出漏れに取り組んでいますが、このツールは、二重解放時に子プロセスを検出し、親によって割り当てられたメモリを削除します。これを克服するために、fork()
をオーバーライドし、fork()
があるときは常に、親のメモリ割り当てテーブルが子に複製されます。
「動作しない」とはどういう意味ですか?ランタイムエラー?コンパイラエラー? – Simone
@Simone:_fork(); //エラー:_forkが宣言されていません。私の考えは、フォークの実際のカーネルバージョンにヒットさせ、私のものではないようにすることでした。今はっきりしていることを願っています。 – kingsmasher1
これを行うことで、正確に何を達成したいですか?あなたの最終目標は何ですか? – Omnifarious