user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<mesg_args>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x68,%rsp
  mov    %rdi,-0x2048(%rbp)
  mov    %rsi,-0x2050(%rbp)
  mov    %rdx,-0x2058(%rbp)
  mov    %ecx,%eax
  mov    %r8d,%esi
  mov    %r9d,%ecx
  mov    0x10(%rbp),%edx
  mov    %al,-0x205c(%rbp)
  mov    %esi,%eax
  mov    %al,-0x2060(%rbp)
  mov    %ecx,%eax
  mov    %al,-0x2064(%rbp)
  mov    %edx,%eax
  mov    %al,-0x2068(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x203c(%rbp)
  movl   $0x0,-0x2038(%rbp)
  mov    -0x2048(%rbp),%rdx
  lea    -0x2020(%rbp),%rax
  mov    $0x2000,%esi
  mov    %rax,%rdi
  call   <strcpyn@plt>
  lea    -0x2020(%rbp),%rax
  mov    %rax,-0x2028(%rbp)
  movl   $0x0,-0x2034(%rbp)
  movl   $0x0,-0x2030(%rbp)
  jmp    L152
L63:
  mov    -0x2030(%rbp),%eax
  cltq
  movzbl -0x2020(%rbp,%rax,1),%eax
  test   %al,%al
  jne    L58
  movl   $0x0,-0x202c(%rbp)
  jmp    L138
L155:
  mov    -0x202c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x2058(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <free@plt>
  addl   $0x1,-0x202c(%rbp)
L138:
  mov    -0x202c(%rbp),%eax
  cmp    -0x203c(%rbp),%eax
  jl     L155
  mov    $0xffffffff,%eax
  jmp    L92
L58:
  mov    -0x2030(%rbp),%eax
  cltq
  movzbl -0x2020(%rbp,%rax,1),%eax
  cmp    $0x5c,%al
  jne    L79
  addl   $0x1,-0x2030(%rbp)
  jmp    L16
L79:
  mov    -0x2030(%rbp),%eax
  cltq
  movzbl -0x2020(%rbp,%rax,1),%eax
  cmp    %al,-0x2068(%rbp)
  jne    L86
  cmpl   $0x0,-0x2038(%rbp)
  sete   %al
  movzbl %al,%eax
  mov    %eax,-0x2038(%rbp)
  jmp    L16
L86:
  cmpl   $0x0,-0x2038(%rbp)
  jne    L37
  mov    -0x2030(%rbp),%eax
  cltq
  movzbl -0x2020(%rbp,%rax,1),%eax
  cmp    %al,-0x205c(%rbp)
  jne    L37
  addl   $0x1,-0x2034(%rbp)
  jmp    L16
L37:
  cmpl   $0x0,-0x2038(%rbp)
  jne    L210
  mov    -0x2030(%rbp),%eax
  cltq
  movzbl -0x2020(%rbp,%rax,1),%eax
  cmp    %al,-0x2064(%rbp)
  jne    L210
  subl   $0x1,-0x2034(%rbp)
  cmpl   $0x0,-0x2034(%rbp)
  jns    L89
  mov    -0x2030(%rbp),%eax
  cltq
  movb   $0x0,-0x2020(%rbp,%rax,1)
  mov    -0x203c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x2058(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x203c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x2058(%rbp),%rax
  add    %rdx,%rax
  movq   $0x0,(%rax)
  mov    -0x2030(%rbp),%eax
  cltq
  lea    -0x2020(%rbp),%rdx
  add    %rdx,%rax
  sub    -0x2028(%rbp),%rax
  add    $0x1,%rax
  mov    -0x203c(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x2058(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rbx
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,(%rbx)
  mov    -0x2030(%rbp),%eax
  cltq
  lea    -0x2020(%rbp),%rdx
  add    %rdx,%rax
  sub    -0x2028(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    -0x203c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x203c(%rbp)
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x2058(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    -0x2028(%rbp),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strcpyn@plt>
  mov    -0x2030(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  lea    -0x2020(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x2028(%rbp)
  jmp    L69
L210:
  cmpl   $0x0,-0x2038(%rbp)
  jne    L16
  cmpl   $0x0,-0x2034(%rbp)
  jg     L16
  mov    -0x2030(%rbp),%eax
  cltq
  movzbl -0x2020(%rbp,%rax,1),%eax
  cmp    %al,-0x2060(%rbp)
  jne    L16
  mov    0x18(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x203c(%rbp)
  jge    L16
  mov    -0x2030(%rbp),%eax
  cltq
  movb   $0x0,-0x2020(%rbp,%rax,1)
  mov    -0x203c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x2058(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x203c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x2058(%rbp),%rax
  add    %rdx,%rax
  movq   $0x0,(%rax)
  mov    -0x2030(%rbp),%eax
  cltq
  lea    -0x2020(%rbp),%rdx
  add    %rdx,%rax
  sub    -0x2028(%rbp),%rax
  add    $0x1,%rax
  mov    -0x203c(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x2058(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rbx
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,(%rbx)
  mov    -0x2030(%rbp),%eax
  cltq
  lea    -0x2020(%rbp),%rdx
  add    %rdx,%rax
  sub    -0x2028(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    -0x203c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x203c(%rbp)
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x2058(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    -0x2028(%rbp),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strcpyn@plt>
  mov    -0x2030(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  lea    -0x2020(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x2028(%rbp)
  jmp    L16
L89:
  nop
L16:
  addl   $0x1,-0x2030(%rbp)
L152:
  cmpl   $0x1ffd,-0x2030(%rbp)
  jle    L63
L69:
  movb   $0x0,-0x21(%rbp)
  mov    -0x2028(%rbp),%rdx
  mov    -0x2050(%rbp),%rcx
  mov    -0x2048(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strcpyn@plt>
  mov    -0x203c(%rbp),%eax
L92:
  mov    -0x18(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L214
  call   <__stack_chk_fail@plt>
L214:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
int mesg_args(char *wbuf, size_t maxlen, char **argv, char ulv, char sep, char dlv, char quot, int maxargs) {
  int argc = 0;
  char buf[((2048) * 4)];
  char *ptr;
  int litflag = 0;
  strcpyn(buf, sizeof(buf), wbuf);
  ptr = buf;
  for (int lev = 0, r = 0; (r < (((2048) * 4) - 2)); r++) {
    if (buf[r] == '\0') {
      for (int i = 0; i < argc; ++i) {
        free(argv[i]);
      }
      return (-1);
    } else if (buf[r] == '\\') {
      r++;
      continue;
    } else if (buf[r] == quot) {
      litflag = (!litflag);
    } else if (!litflag && buf[r] == ulv) {
      lev++;
      continue;
    } else if (!litflag && buf[r] == dlv) {
      lev--;
      if (lev < 0) {
        buf[r] = '\0';
        free(argv[argc]);
        argv[argc] = NULL;
        argv[argc] = malloc((size_t)((buf + r) - ptr) + 1);
        strcpyn(argv[argc++], (size_t)((buf + r) - ptr) + 1, ptr);
        ptr = buf + r + 1;
        break;
      }
      continue;
    } else if (!litflag && lev < 1 && buf[r] == sep) {
      if (argc < maxargs - 1) {
        buf[r] = '\0';
        free(argv[argc]);
        argv[argc] = NULL;
        argv[argc] = malloc((size_t)((buf + r) - ptr) + 1);
        strcpyn(argv[argc++], (size_t)((buf + r) - ptr) + 1, ptr);
        ptr = buf + r + 1;
      }
    }
  }
  buf[((2048) * 4) - 1] = '\0';
  strcpyn(wbuf, maxlen, ptr);
  return argc;
}
```