+ CHECK_STR_NONULL(Regs->Arg1);
+ // Check the argument arrays
+ {
+ int i;
+ char **tmp = (char**)Regs->Arg2;
+ // Check ArgV (traverse array checking all string pointers)
+ CHECK_NUM_NONULL( tmp, sizeof(char**) );
+ //Log("tmp = %p", tmp);
+ for(i=0;tmp[i];i++) {
+ CHECK_NUM_NONULL( &tmp[i], sizeof(char*) );
+ CHECK_STR_NONULL( tmp[i] );
+ }
+ // Check EnvP also
+ // - EnvP can be NULL
+ if( Regs->Arg3 )
+ {
+ tmp = (char**)Regs->Arg3;
+ //Log("tmp = %p", tmp);
+ for(i=0;tmp[i];i++) {
+ CHECK_NUM_NULLOK( &tmp[i], sizeof(char*) );
+ CHECK_STR_NONULL( tmp[i] );
+ }
+ }
+ }
+ LEAVE('s', "Assuming 0");
+ // Path, **Argv, **Envp
+ ret = Proc_Execve( (char*)Regs->Arg1, (char**)Regs->Arg2, (char**)Regs->Arg3 );