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

```asm
<_escaped_strcpy>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  mov    (%rsi),%eax
  movq   $0x0,(%rsp)
  test   %eax,%eax
  je     L23
  mov    (%rdi),%rax
  mov    %rdi,%rbx
  mov    %rsi,%rbp
  lea    0x1(%rax),%rdx
  mov    %rdx,(%rdi)
  movb   $0x22,(%rax)
  mov    (%rsp),%rax
  mov    (%rsi,%rax,4),%edx
  test   %edx,%edx
  je     L93
  lea    D8(%rip),%r12
  nop
L117:
  cmp    $0x5c,%edx
  ja     L15
  mov    %edx,%ecx
  movslq (%r12,%rcx,4),%rcx
  add    %r12,%rcx
  notrack jmp *%rcx
  nopl   0x0(%rax)
L15:
  cmp    $0x7f,%edx
  jg     L30
  add    $0x1,%rax
  mov    %rax,(%rsp)
L97:
  mov    (%rbx),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,(%rbx)
  mov    %dl,(%rax)
  mov    (%rsp),%rax
L46:
  mov    0x0(%rbp,%rax,4),%edx
  test   %edx,%edx
  jne    L117
L93:
  mov    0x0(%rbp),%eax
  test   %eax,%eax
  je     L23
  mov    (%rbx),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,(%rbx)
  movb   $0x22,(%rax)
L23:
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L59
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopw   0x0(%rax,%rax,1)
  mov    (%rbx),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,(%rbx)
  movb   $0x5c,(%rax)
  mov    (%rsp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,(%rsp)
  mov    0x0(%rbp,%rax,4),%edx
  jmp    L97
  mov    (%rbx),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,(%rbx)
  movb   $0x5c,(%rax)
  mov    (%rbx),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,(%rbx)
  movb   $0x62,(%rax)
  mov    (%rsp),%rax
  add    $0x1,%rax
  mov    %rax,(%rsp)
  jmp    L46
  mov    (%rbx),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,(%rbx)
  movb   $0x5c,(%rax)
  mov    (%rbx),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,(%rbx)
  movb   $0x72,(%rax)
  mov    (%rsp),%rax
  add    $0x1,%rax
  mov    %rax,(%rsp)
  jmp    L46
  mov    (%rbx),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,(%rbx)
  movb   $0x5c,(%rax)
  mov    (%rbx),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,(%rbx)
  movb   $0x66,(%rax)
  mov    (%rsp),%rax
  add    $0x1,%rax
  mov    %rax,(%rsp)
  jmp    L46
  mov    (%rbx),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,(%rbx)
  movb   $0x5c,(%rax)
  mov    (%rbx),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,(%rbx)
  movb   $0x6e,(%rax)
  mov    (%rsp),%rax
  add    $0x1,%rax
  mov    %rax,(%rsp)
  jmp    L46
  mov    (%rbx),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,(%rbx)
  movb   $0x5c,(%rax)
  mov    (%rbx),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,(%rbx)
  movb   $0x74,(%rax)
  mov    (%rsp),%rax
  add    $0x1,%rax
  mov    %rax,(%rsp)
  jmp    L46
  xchg   %ax,%ax
L30:
  mov    %rsp,%rdx
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <_unicode@plt>
  mov    (%rsp),%rax
  jmp    L46
L59:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void _escaped_strcpy(char **buf, uint8_t *ujstringdata) {
  uint16_t n = 0;
  if (ujstringdata[0])
    *((*buf)++) = '"';
  while (ujstringdata[n]) {
    switch (ujstringdata[n]) {
    case '"':
    case '\\':
    case '\x00':
    case '\x01':
    case '\x02':
    case '\x03':
    case '\x04':
    case '\x05':
    case '\x06':
    case '\x07':
    case '\x0B':
    case '\x0E':
    case '\x0F':
    case '\x10':
    case '\x11':
    case '\x12':
    case '\x13':
    case '\x14':
    case '\x15':
    case '\x16':
    case '\x17':
    case '\x18':
    case '\x19':
    case '\x1A':
    case '\x1B':
    case '\x1C':
    case '\x1D':
    case '\x1E':
    case '\x1F':
      *((*buf)++) = '\\';
      *((*buf)++) = (char)ujstringdata[n++];
      continue;
    case '\b':
      *((*buf)++) = '\\';
      *((*buf)++) = 'b';
      n++;
      continue;
    case '\f':
      *((*buf)++) = '\\';
      *((*buf)++) = 'f';
      n++;
      continue;
    case '\n':
      *((*buf)++) = '\\';
      *((*buf)++) = 'n';
      n++;
      continue;
    case '\r':
      *((*buf)++) = '\\';
      *((*buf)++) = 'r';
      n++;
      continue;
    case '\t':
      *((*buf)++) = '\\';
      *((*buf)++) = 't';
      n++;
      continue;
    default:
      if (ujstringdata[n] > 0x7F) {
        _unicode(buf, ujstringdata, &n);
      } else {
        *((*buf)++) = (char)ujstringdata[n++];
      }
      continue;
    }
  }
  if (ujstringdata[0])
    *((*buf)++) = '"';
}
```