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

```asm
<get_mode_string>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %edi,%ebx
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  lea    D30(%rip),%rax
  mov    %rax,(%rsp)
  lea    D69(%rip),%rax
  mov    %rax,0x8(%rsp)
  lea    D70(%rip),%rax
  mov    %rax,0x10(%rsp)
  lea    D159(%rip),%rax
  mov    %rax,0x18(%rsp)
  lea    D156(%rip),%rax
  mov    %rax,0x20(%rsp)
  lea    D97(%rip),%rax
  mov    %rax,0x28(%rsp)
  lea    D212(%rip),%rax
  mov    %rax,0x30(%rsp)
  lea    D81(%rip),%rax
  mov    %rax,0x38(%rsp)
  call   <S_ISREG@plt>
  test   %rax,%rax
  je     L6
  movb   $0x2d,D133(%rip)
  lea    D189(%rip),%rbp
L43:
  mov    %ebx,%eax
  sar    $0x6,%eax
  and    $0x7,%eax
  mov    (%rsp,%rax,8),%rsi
  mov    %rbp,%rdi
  call   <strcpy@plt>
  mov    %ebx,%eax
  sar    $0x3,%eax
  and    $0x7,%eax
  mov    (%rsp,%rax,8),%rsi
  lea    0x3(%rbp),%rdi
  call   <strcpy@plt>
  and    $0x7,%ebx
  mov    (%rsp,%rbx,8),%rsi
  lea    0x6(%rbp),%rdi
  call   <strcpy@plt>
  movb   $0x0,0x9(%rbp)
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L86
  lea    D133(%rip),%rax
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  ret
L6:
  mov    %ebx,%edi
  call   <S_ISDIR@plt>
  test   %rax,%rax
  je     L75
  movb   $0x64,D133(%rip)
  lea    D189(%rip),%rbp
  jmp    L43
L75:
  mov    %ebx,%edi
  call   <S_ISCHR@plt>
  test   %rax,%rax
  je     L59
  movb   $0x63,D133(%rip)
  lea    D189(%rip),%rbp
  jmp    L43
L59:
  mov    %ebx,%edi
  call   <S_ISBLK@plt>
  test   %rax,%rax
  je     L77
  movb   $0x62,D133(%rip)
  lea    D189(%rip),%rbp
  jmp    L43
L77:
  mov    %ebx,%edi
  call   <S_ISFIFO@plt>
  test   %rax,%rax
  je     L21
  movb   $0x70,D133(%rip)
  lea    D189(%rip),%rbp
  jmp    L43
L21:
  mov    %ebx,%edi
  call   <S_ISLNK@plt>
  test   %rax,%rax
  je     L19
  movb   $0x6c,D133(%rip)
  lea    D189(%rip),%rbp
  jmp    L43
L19:
  mov    %ebx,%edi
  call   <S_ISSOCK@plt>
  lea    D133(%rip),%rbp
  test   %rax,%rax
  je     L43
  movb   $0x73,D133(%rip)
  lea    0x1(%rbp),%rbp
  jmp    L43
L86:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: label: D30
type: string
name: unpack_data
arguments: label: D69
type: string
name: unpack_data
arguments: label: D70
type: string
name: unpack_data
arguments: label: D159
type: string
name: unpack_data
arguments: label: D156
type: string
name: unpack_data
arguments: label: D97
type: string
name: unpack_data
arguments: label: D212
type: string
name: unpack_data
arguments: label: D81
type: string

tool: D30: ---

tool: D69: --x

tool: D70: -w-

tool: D159: -wx

tool: D156: r--

tool: D97: r-x

tool: D212: rw-

tool: D81: rwx

assistant: ```c
char *get_mode_string(mode_t mode) {
  int m;
  static char mode_string[16];
  char *buff = mode_string;
  char *perm[] = {"---", "--x", "-w-", "-wx", "r--", "r-x", "rw-", "rwx"};
  if (S_ISREG(mode)) {
    *(buff++) = '-';
  } else if (S_ISDIR(mode)) {
    *(buff++) = 'd';
  } else if (S_ISCHR(mode)) {
    *(buff++) = 'c';
  } else if (S_ISBLK(mode)) {
    *(buff++) = 'b';
  } else if (S_ISFIFO(mode)) {
    *(buff++) = 'p';
  } else if (S_ISLNK(mode)) {
    *(buff++) = 'l';
  } else if (S_ISSOCK(mode)) {
    *(buff++) = 's';
  }
  m = (mode >> 6) & 7;
  strcpy(buff, perm[m]);
  buff += 3;
  m = (mode >> 3) & 7;
  strcpy(buff, perm[m]);
  buff += 3;
  m = (mode >> 0) & 7;
  strcpy(buff, perm[m]);
  buff += 3;
  *buff = 0;
  return (mode_string);
}
```