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

```asm
<thread_listen>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x838,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x828(%rsp)
  xor    %eax,%eax
  mov    (%rdi),%ebx
  mov    %ebx,0x4(%rsp)
  movl   $0x4,0x10(%rsp)
  mov    $0x8,%edi
  call   <malloc@plt>
  mov    %rax,%r12
  mov    $0x5,%esi
  mov    %ebx,%edi
  call   <listen@plt>
  lea    0x10(%rsp),%rax
  mov    %rax,0x8(%rsp)
  jmp    L6
L32:
  lea    D8(%rip),%rdi
  call   <printf@plt>
  jmp    L38
L24:
  movzbl 0x0(%rbp,%rbx,1),%eax
  mov    %al,-0x1(%r12,%rbx,1)
L23:
  mov    %rbp,%rdi
  call   <strlen@plt>
  add    $0x1,%rbx
  cmp    %ebx,%eax
  jg     L24
  lea    0x18(%rsp),%rsi
  mov    %r12,%rdi
  call   <stat@plt>
  test   %rax,%rax
  cmove  0x18(%rsp),%r14d
  lea    0x420(%rsp),%r9
  lea    0x220(%rsp),%r8
  mov    %r15d,%ecx
  mov    %r14d,%edx
  mov    %rbp,%rsi
  mov    %r13d,%edi
  call   <insertion@plt>
L6:
  lea    0x14(%rsp),%rsi
  mov    0x8(%rsp),%rdx
  mov    0x4(%rsp),%edi
  call   <accept@plt>
  mov    %eax,%r13d
  mov    0x14(%rsp),%r15d
  lea    0x1c(%rsp),%rbx
  mov    %rbx,%rdi
  call   <time@plt>
  mov    %rbx,%rdi
  call   <localtime@plt>
  mov    %rax,%rcx
  lea    0x20(%rsp),%rbx
  lea    D31(%rip),%rdx
  mov    $0x200,%esi
  mov    %rbx,%rdi
  call   <strftime@plt>
  lea    0x220(%rsp),%rdi
  mov    $0x0,%ecx
  mov    %rbx,%rdx
  mov    $0x200,%esi
  call   <snprintf@plt>
  mov    $0x8,%edi
  call   <malloc@plt>
  mov    %rax,%rbp
  lea    0x420(%rsp),%rbx
  mov    $0x400,%edx
  mov    $0x0,%esi
  mov    %rbx,%rdi
  call   <memset@plt>
  mov    $0x0,%ecx
  mov    $0x400,%edx
  mov    %rbx,%rsi
  mov    %r13d,%edi
  call   <recv@plt>
  test   %eax,%eax
  js     L32
  lea    0x420(%rsp),%rdi
  lea    D3(%rip),%rsi
  call   <strtok@plt>
  lea    D3(%rip),%rsi
  mov    $0x0,%edi
  call   <strtok@plt>
  mov    %rax,%rbp
L38:
  mov    $0x0,%ebx
  test   %rbp,%rbp
  jne    L23
  jmp    L6
```

tool_calls: name: disassemble_data
arguments: tag: D8
type_guessed: string
name: disassemble_data
arguments: tag: D31
type_guessed: string
name: disassemble_data
arguments: tag: D3
type_guessed: string

tool: D8: recv error detected ...


tool: D31: [%d/%b/%Y : %H:%M:%S %z]

tool: D3:  

assistant: ```c
void *thread_listen(void *arg) {
  unsigned int sockfd = *((unsigned int *)arg);
  int i, size;
  unsigned int acceptfd, ids2;
  socklen_t clilen;
  int newsockfd[10], c;
  int n;
  char buffer[256];
  pthread_t t_serve[10];
  struct sockaddr_in cli_addr;
  clilen = sizeof(cli_addr);
  unsigned int retval;
  char request_buffer[1024];
  int retcode;
  off_t file_size;
  char in_buf[1024];
  char *fname = malloc(sizeof(char *));
  struct stat st;
  int k, j;
  int l;
  listen(sockfd, 5);
  while (1) {
    acceptfd = accept(sockfd, (struct sockaddr *)&cli_addr, &clilen);
    if (acceptfd < 0)
      perror("error in accepting");
    unsigned int ip = cli_addr.sin_addr.s_addr;
    time_t now;
    time(&now);
    struct tm *ct = localtime(&now);
    int ch[128], time_arrival[128];
    struct timeval tv;
    strftime(ch, sizeof ch, "[%d/%b/%Y : %H:%M:%S %z]", ct);
    snprintf(time_arrival, sizeof time_arrival, ch, tv.tv_usec);
    char *file_name = malloc(sizeof(char *));
    memset(in_buf, 0, sizeof(in_buf));
    retcode = recv(acceptfd, in_buf, 1024, 0);
    if (retcode < 0) {
      printf("recv error detected ...\n");
    } else {
      strtok(in_buf, " ");
      file_name = strtok(NULL, " ");
    }
    if (file_name != NULL) {
      k = 1, j = 0;
      while (k < strlen(file_name)) {
        fname[j] = file_name[k];
        k++;
        j++;
      }
      if (stat(fname, &st) == 0)
        file_size = st.st_size;
      insertion(acceptfd, file_name, file_size, ip, time_arrival, in_buf);
    } else {
      continue;
    }
  }
}
```