2017-11-22 6 views
0

Linuxでexec(...)を呼び出すと、sys_execve()を呼び出してdo_execveを呼び出し、一致するものが見つかるまでハンドラーのリストを調べます(これにはbinfmt_elf.cにデフォルトのelfハンドラーがあります)を呼び出して終了します。Linuxでexecveを起動する方法は?

一方、glibcのソースを見ると、execve()hurd_exec()を呼び出し、__file_exec(これはソースが見つかりません)を呼び出します。最終的にはdl-open.cになりますが、その間に実行されるコードは見つかりません。

私はユーザ空間プログラムが常にライブラリからそのバージョンを呼び出すと仮定しています。この場合、__file_execはどこに行きますか?カーネルコードまたはglibcコードのいずれにも参照できません...

注:これはarmv8、linux 3.10用です。一方

答えて

1

あなたはglibc向けのソースを見れば、その後はexecve()は、Linux上で

ません)(hurd_exec呼び出し、それはしていません。

あなたはおそらくsysdeps/mach/hurd/execve.cを見ていますが、Linuxではsysdeps/unix/sysv/linux/execve.cがあります。これはINLINE_SYSCALL (execve, ...);と呼ばれ、カーネルに制御を渡します。

+0

ああ、それはいくつかのことを説明します。間違った道を離れてくれてありがとう! – HardcoreHenry

関連する問題