user: 下面的汇编指令对应的C源代码是什么：

```asm
<buildargv_argc>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x48(%rbp)
  movl   $0x0,-0x44(%rbp)
  movl   $0x0,-0x40(%rbp)
  movl   $0x0,-0x3c(%rbp)
  movq   $0x0,-0x30(%rbp)
  cmpq   $0x0,-0x58(%rbp)
  je     L126
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  add    $0x1,%rax
  lea    0x8(%rax),%rdx
  mov    $0x10,%eax
  sub    $0x1,%rax
  add    %rdx,%rax
  mov    $0x10,%esi
  mov    $0x0,%edx
  div    %rsi
  imul   $0x10,%rax,%rax
  mov    %rax,%rcx
  and    $0xfffffffffffff000,%rcx
  mov    %rsp,%rdx
  sub    %rcx,%rdx
L36:
  cmp    %rdx,%rsp
  je     L109
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L36
L109:
  mov    %rax,%rdx
  and    $0xfff,%edx
  sub    %rdx,%rsp
  mov    %rax,%rdx
  and    $0xfff,%edx
  test   %rdx,%rdx
  je     L160
  and    $0xfff,%eax
  sub    $0x8,%rax
  add    %rsp,%rax
  orq    $0x0,(%rax)
L160:
  mov    %rsp,%rax
  add    $0xf,%rax
  shr    $0x4,%rax
  shl    $0x4,%rax
  mov    %rax,-0x20(%rbp)
  jmp    L318
L131:
  addq   $0x1,-0x58(%rbp)
L318:
  mov    -0x58(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %eax,%eax
  jne    L131
  cmpl   $0x0,-0x3c(%rbp)
  je     L103
  mov    -0x60(%rbp),%rax
  mov    (%rax),%eax
  mov    -0x3c(%rbp),%edx
  sub    $0x1,%edx
  cmp    %edx,%eax
  jl     L355
L103:
  cmpq   $0x0,-0x30(%rbp)
  jne    L31
  mov    -0x60(%rbp),%rax
  mov    (%rax),%eax
  mov    $0x8,%edx
  cmp    %edx,%eax
  cmovl  %edx,%eax
  mov    %eax,-0x3c(%rbp)
  mov    -0x3c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,-0x28(%rbp)
  jmp    L192
L31:
  shll   -0x3c(%rbp)
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <realloc@plt>
  mov    %rax,-0x28(%rbp)
L192:
  cmpq   $0x0,-0x28(%rbp)
  jne    L39
  cmpq   $0x0,-0x30(%rbp)
  je     L22
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <freeargv@plt>
  movq   $0x0,-0x30(%rbp)
  jmp    L22
L39:
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x30(%rbp)
  mov    -0x60(%rbp),%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movq   $0x0,(%rax)
L355:
  mov    -0x20(%rbp),%rax
  mov    %rax,-0x38(%rbp)
  jmp    L119
L61:
  mov    -0x58(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %eax,%eax
  je     L290
  cmpl   $0x0,-0x48(%rbp)
  jne    L290
  cmpl   $0x0,-0x44(%rbp)
  jne    L290
  cmpl   $0x0,-0x40(%rbp)
  je     L90
L290:
  cmpl   $0x0,-0x40(%rbp)
  je     L403
  movl   $0x0,-0x40(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  mov    -0x58(%rbp),%rdx
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  jmp    L37
L403:
  mov    -0x58(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x5c,%al
  jne    L333
  movl   $0x1,-0x40(%rbp)
  jmp    L37
L333:
  cmpl   $0x0,-0x48(%rbp)
  je     L310
  mov    -0x58(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x27,%al
  jne    L42
  movl   $0x0,-0x48(%rbp)
  jmp    L37
L42:
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  mov    -0x58(%rbp),%rdx
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  jmp    L37
L310:
  cmpl   $0x0,-0x44(%rbp)
  je     L96
  mov    -0x58(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  jne    L414
  movl   $0x0,-0x44(%rbp)
  jmp    L37
L414:
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  mov    -0x58(%rbp),%rdx
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  jmp    L37
L96:
  mov    -0x58(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x27,%al
  jne    L389
  movl   $0x1,-0x48(%rbp)
  jmp    L37
L389:
  mov    -0x58(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  jne    L79
  movl   $0x1,-0x44(%rbp)
  jmp    L37
L79:
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  mov    -0x58(%rbp),%rdx
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
L37:
  addq   $0x1,-0x58(%rbp)
L119:
  mov    -0x58(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L61
L90:
  mov    -0x38(%rbp),%rax
  movb   $0x0,(%rax)
  mov    -0x60(%rbp),%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,(%rbx)
  mov    -0x60(%rbp),%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  test   %rax,%rax
  jne    L7
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <freeargv@plt>
  movq   $0x0,-0x30(%rbp)
  jmp    L126
L7:
  mov    -0x60(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%edx
  mov    -0x60(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x60(%rbp),%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movq   $0x0,(%rax)
  jmp    L65
L391:
  addq   $0x1,-0x58(%rbp)
L65:
  mov    -0x58(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %eax,%eax
  jne    L391
  mov    -0x58(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L318
  jmp    L126
L22:
  nop
L126:
  mov    -0x30(%rbp),%rax
  mov    -0x18(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L125
  call   <__stack_chk_fail@plt>
L125:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
char **buildargv_argc(input, argc) const char *input;
int *argc;
{
  char *arg;
  char *copybuf;
  int squote = 0;
  int dquote = 0;
  int bsquote = 0;
  int maxargc = 0;
  char **argv = 0;
  char **nargv;
  if (input != 0) {
    copybuf = __builtin_alloca(strlen(input) + 1);
    do {
      while ((1 && isspace((int)*input)))
        input++;
      if ((maxargc == 0) || (*argc >= (maxargc - 1))) {
        if (argv == 0) {
          maxargc = *argc > 8 ? *argc : 8;
          nargv = (char **)malloc(maxargc * sizeof(char *));
        } else {
          maxargc *= 2;
          nargv = (char **)realloc(argv, maxargc * sizeof(char *));
        }
        if (nargv == 0) {
          if (argv != 0) {
            freeargv(argv);
            argv = 0;
          }
          break;
        }
        argv = nargv;
        argv[*argc] = 0;
      }
      arg = copybuf;
      while (*input != '\0') {
        if ((1 && isspace((int)*input)) && !squote && !dquote && !bsquote)
          break;
        else {
          if (bsquote) {
            bsquote = 0;
            *arg++ = *input;
          } else if (*input == '\\') {
            bsquote = 1;
          } else if (squote) {
            if (*input == '\'')
              squote = 0;
            else
              *arg++ = *input;
          } else if (dquote) {
            if (*input == '"')
              dquote = 0;
            else
              *arg++ = *input;
          } else {
            if (*input == '\'') {
              squote = 1;
            } else if (*input == '"') {
              dquote = 1;
            } else {
              *arg++ = *input;
            }
          }
          input++;
        }
      }
      *arg = '\0';
      argv[*argc] = strdup(copybuf);
      if (argv[*argc] == 0) {
        freeargv(argv);
        argv = 0;
        break;
      }
      (*argc)++;
      argv[*argc] = 0;
      while ((1 && isspace((int)*input)))
        input++;
    } while (*input != '\0');
  }
  return (argv);
}
```