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

```asm
<getheader>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0xc8,%rsp
  mov    %rdi,-0xc8(%rbp)
  mov    %esi,-0xcc(%rbp)
  mov    %edx,-0xd0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  lea    -0xa8(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <gettimeofday@plt>
  lea    -0xa8(%rbp),%rax
  add    $0x4,%rax
  mov    %rax,%rdi
  call   <localtime@plt>
  mov    %rax,-0xb0(%rbp)
  lea    -0xa0(%rbp),%rax
  mov    $0x80,%esi
  mov    %rax,%rdi
  call   <gethostname@plt>
  lea    -0xa0(%rbp),%rax
  mov    %rax,-0xb8(%rbp)
  jmp    L37
L61:
  mov    -0xb8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2e,%al
  jne    L20
  mov    -0xb8(%rbp),%rax
  movb   $0x0,(%rax)
  jmp    L44
L20:
  addq   $0x1,-0xb8(%rbp)
L37:
  mov    -0xb8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L61
L44:
  cmpl   $0x0,-0xd0(%rbp)
  je     L5
  mov    -0xa8(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x10624dd3,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x6,%edx
  sar    $0x1f,%eax
  sub    %eax,%edx
  mov    %edx,%r10d
  mov    -0xb0(%rbp),%rax
  mov    0x14(%rax),%r8d
  mov    -0xb0(%rbp),%rax
  mov    0x10(%rax),%edi
  mov    -0xb0(%rbp),%rax
  mov    0xc(%rax),%ecx
  mov    -0xb0(%rbp),%rax
  mov    0x8(%rax),%r11d
  mov    -0xb0(%rbp),%rax
  mov    0x4(%rax),%eax
  lea    0x1(%rax),%ebx
  mov    -0xb0(%rbp),%rax
  mov    (%rax),%eax
  lea    0x76c(%rax),%edx
  mov    -0xcc(%rbp),%esi
  mov    -0xc8(%rbp),%rax
  sub    $0x8,%rsp
  lea    -0xa0(%rbp),%r9
  push   %r9
  push   %r10
  push   %r8
  push   %rdi
  push   %rcx
  mov    %r11d,%r9d
  mov    %ebx,%r8d
  mov    %edx,%ecx
  lea    D9(%rip),%rdx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  add    $0x30,%rsp
  jmp    L0
L5:
  mov    -0xb0(%rbp),%rax
  mov    0x14(%rax),%r8d
  mov    -0xb0(%rbp),%rax
  mov    0x10(%rax),%edi
  mov    -0xb0(%rbp),%rax
  mov    0xc(%rax),%ecx
  mov    -0xb0(%rbp),%rax
  mov    0x8(%rax),%r10d
  mov    -0xb0(%rbp),%rax
  mov    0x4(%rax),%eax
  lea    0x1(%rax),%r11d
  mov    -0xb0(%rbp),%rax
  mov    (%rax),%eax
  lea    0x76c(%rax),%edx
  mov    -0xcc(%rbp),%esi
  mov    -0xc8(%rbp),%rax
  lea    -0xa0(%rbp),%r9
  push   %r9
  push   %r8
  push   %rdi
  push   %rcx
  mov    %r10d,%r9d
  mov    %r11d,%r8d
  mov    %edx,%ecx
  lea    D4(%rip),%rdx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  add    $0x20,%rsp
L0:
  nop
  mov    -0x18(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L41
  call   <__stack_chk_fail@plt>
L41:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D9
data_type: string
name: parse_data
arguments: data_label: D4
data_type: string

tool: D9: %04d/%02d/%02d %02d:%02d:%02d.%03d %s 

tool: D4: %04d/%02d/%02d %02d:%02d:%02d %s 

assistant: ```c
void getheader(char *head, int size, int msec) {
  struct timeval tv;
  struct tm *t_st;
  char host[128];
  char *p;
  (void)gettimeofday(&tv, NULL);
  t_st = localtime(&tv.tv_sec);
  (void)gethostname(host, sizeof(host));
  p = host;
  while (*p != '\0') {
    if (*p == '.') {
      *p = '\0';
      break;
    }
    p++;
  }
  if (msec) {
    snprintf(head, size, "%04d/%02d/%02d %02d:%02d:%02d.%03d %s ", t_st->tm_year + 1900, t_st->tm_mon + 1, t_st->tm_mday, t_st->tm_hour, t_st->tm_min, t_st->tm_sec, tv.tv_usec / 1000, host);
  } else {
    snprintf(head, size, "%04d/%02d/%02d %02d:%02d:%02d %s ", t_st->tm_year + 1900, t_st->tm_mon + 1, t_st->tm_mday, t_st->tm_hour, t_st->tm_min, t_st->tm_sec, host);
  }
}
```