[原创] 调试httpd通过fork execute调用的cgibin程序 | 宜武汇-ag真人国际厅网站

__pid_t __fastcall spawn(const char *filename, char *const *argv, char *const *envp, int a4, int a5, int a6, int a7, char *path)

  __pid_t result; // $v0

  int v13; // $a0

  int v14[4]; // [sp 18h] [-18h] byref

  __pid_t v15; // [sp 28h] [-8h]

 

  result = fork();  // 创建子进程,此时的子进程依旧是httpd的程序镜像

  if ( result == -1 )

  {

    v15 = -1;

    lerror("spawn: failed to create child process");

    goto label_6;

  }

  if ( !result )

  {

    setpgid(0, 0);  // 改变子进程的进程组

    sub_409c9c(13, 0);

    if ( coredir )

    {

      v14[3] = 0;

      v14[2] = 0;

      v14[1] = 0;

      v14[0] = 0;

      setrlimit64(4, v14);  // 设置资源限制

    }

    dup2(a4, 0);  // 复制文件描述符:标准输入和标准输出

    dup2(a4, 1);

    if ( a5 != -1 )

      dup2(a5, 2);

    if ( chdir(path) == -1 )

    {

      v13 = 5;

    }

    else

    {

      execve(filename, argv, envp);  // 执行cgibin,将cgibin加载并替换掉子进程的httpd

      v13 = 6;

    }

    exit(v13);

  }

   dword_42350c;

  if ( debug )

  {

    v15 = result;

    log_d("child process %d created", result);

label_6:

    result = v15;

  }

  return result;

原文链接:https://bbs.kanxue.com/thread-276464.htm

网络摘文,本文作者:15h,如若转载,请注明出处:https://www.15cov.cn/2023/08/27/原创-调试httpd通过forkexecute调用的cgibin程序/

发表评论

邮箱地址不会被公开。 必填项已用*标注

网站地图