strace(1)
基本的に を使用するのと同じことを行うプロジェクトに取り組んでいptrace()
ます。基本的に、実行可能ファイルを引数として受け取り、実行可能ファイルによって行われたシステム コールを出力する controller.c プログラムがあります (たとえば、% controller ls -l
) を使用しexecve()
て実行可能ファイルを実行していますが、少し問題があります。execve は次の引数を取ります
execve( const char *filename, char *const argv[], char *const envp[] )
このインスタンスの filename は で"ls"
ありargv[]
、指定されたファイル名の引数のリストです。したがって、次のようなものがあります(Cファイル内)
int main(int argc, char *argv[],char *envp[]){
pid_t child;
child = fork;
if(/* CHILD */){
ptrace(PTRACE_TRACEME,0, NULL, NULL);
if(argc == 2) {
execve(argv[1],NULL,envp);
}
else {
execve( argv[1], /* ARGUMENT LIST */, envp);
}
} else /* PARENT */ {
//PARENT CODE
}
}
実行可能ファイルを取得した場合、たとえばcontroller ls -l
、where argv[0] = "controller"
、argv[1] = "ls"
およびargv[2] = "-l"
の場合、「ARGUMENT LIST」で正しいパラメーターを渡すにはどうすればよいでしょうか (この場合の引数は単なる"-l"
ものですが、それ以上になる可能性もあります)。
const char *
基本的に、配列が実行可能ファイルの引数値を持つような型の配列を初期化するにはどうすればよいでしょうか? argv
配列に余分な値があり、 ARGUMENT LIST の直前にあることを心配する必要さえありますか?
ご協力いただきありがとうございます!