関数execve(x86_64 Linuxの下で)の実装を見るには、ライブラリunistdにありますか? execveを呼び出さずに、アセンブラを使用して外部プログラムを呼び出す方法を知りたいので、これが必要です。 私はexecveという名前のシステムコールがあることを知っていますが、私はそれをどのように使うことができるのか分かりません。関数の実装execve(unistd.h)
変数char *と型char * []をレジスタに入れるにはどうすればよいですか?実際の「仕事」のすべてがカーネルで行われ
int execve(const char *filename, char * const argv[], char * const envp[]) {
return syscall(SYS_execve, filename, argv, envp);
}
:
ありがとうございますが、どのようにchar *型とchar * []型の変数をレジスタに入れることができますか?私は書き込みと終了のシステムコールを作成する方法しか知りません。例えば、ポインタをレジスタに入れ、バッファサイズを別のものにする必要がありますが、どうすればいいですか? – dv1729
以前と変わることはありません - ファイル名、引数配列、環境配列へのポインタを3つのレジスタに入れます。後者の2つは 'char *'の配列の先頭へのポインタで、NULLで終わるものでなければなりません。 – duskwuff