user: 请从给定的汇编指令推导出C源代码：

```asm
<cmdshell_print_help>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xb0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D101(%rip),%rax
  mov    %rax,-0xb0(%rbp)
  lea    D207(%rip),%rax
  mov    %rax,-0xa8(%rbp)
  lea    D101(%rip),%rax
  mov    %rax,-0xa0(%rbp)
  lea    D9(%rip),%rax
  mov    %rax,-0x98(%rbp)
  lea    D177(%rip),%rax
  mov    %rax,-0x90(%rbp)
  lea    D148(%rip),%rax
  mov    %rax,-0x88(%rbp)
  lea    D54(%rip),%rax
  mov    %rax,-0x80(%rbp)
  lea    D159(%rip),%rax
  mov    %rax,-0x78(%rbp)
  lea    D84(%rip),%rax
  mov    %rax,-0x70(%rbp)
  lea    D85(%rip),%rax
  mov    %rax,-0x68(%rbp)
  lea    D13(%rip),%rax
  mov    %rax,-0x60(%rbp)
  lea    D123(%rip),%rax
  mov    %rax,-0x58(%rbp)
  lea    D37(%rip),%rax
  mov    %rax,-0x50(%rbp)
  lea    D86(%rip),%rax
  mov    %rax,-0x48(%rbp)
  lea    D52(%rip),%rax
  mov    %rax,-0x40(%rbp)
  lea    D169(%rip),%rax
  mov    %rax,-0x38(%rbp)
  lea    D39(%rip),%rax
  mov    %rax,-0x30(%rbp)
  lea    D101(%rip),%rax
  mov    %rax,-0x28(%rbp)
  lea    D83(%rip),%rax
  mov    %rax,-0x20(%rbp)
  lea    D124(%rip),%rax
  mov    %rax,-0x18(%rbp)
  lea    D101(%rip),%rax
  mov    %rax,-0x10(%rbp)
  lea    -0xb0(%rbp),%rax
  mov    $0x15,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <info_printer@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L3
  call   <__stack_chk_fail@plt>
L3:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: tag: D101
datatype: string
name: unpack_data
arguments: tag: D207
datatype: string
name: unpack_data
arguments: tag: D9
datatype: string
name: unpack_data
arguments: tag: D177
datatype: string
name: unpack_data
arguments: tag: D148
datatype: string
name: unpack_data
arguments: tag: D54
datatype: string
name: unpack_data
arguments: tag: D159
datatype: string
name: unpack_data
arguments: tag: D84
datatype: string
name: unpack_data
arguments: tag: D85
datatype: string
name: unpack_data
arguments: tag: D13
datatype: string
name: unpack_data
arguments: tag: D123
datatype: string
name: unpack_data
arguments: tag: D37
datatype: string
name: unpack_data
arguments: tag: D86
datatype: string
name: unpack_data
arguments: tag: D52
datatype: string
name: unpack_data
arguments: tag: D169
datatype: string
name: unpack_data
arguments: tag: D39
datatype: string
name: unpack_data
arguments: tag: D83
datatype: string
name: unpack_data
arguments: tag: D124
datatype: string

tool: D101: 


tool: D207: Help info:


tool: D9: init write        --  initialize options for writing


tool: D177:                       (source, destination, offset, cipher)
init write dir    --  initialize write directory data


tool: D148:                       (description)


tool: D54: init write file   --  initialize write file data


tool: D159:                       (archive filename, description, relative offset)


tool: D84: init read         --  initialize options for reading


tool: D85:                       (source, destination, offset, cipher)
init password     --  initialize password for read and write operations


tool: D13: status write      --  show set write options


tool: D123: status write dir  --  show write directory contents


tool: D37: status write file --  show write file data


tool: D86: status read       --  show set read options


tool: D52: status password   --  show set password for read and write operations


tool: D169: write dir         --  write directory data to destination


tool: D39: write file        --  write file data and contents to destination


tool: D83: help              --  print this info


tool: D124: quit              --  exit the command shell


assistant: ```c
void cmdshell_print_help(void) {
  const char *lines[] = {"\n",
                         "Help info:\n",
                         "\n",
                         "init write        --  initialize options for writing\n",
                         "                      (source, destination, offset, cipher)\n"
                         "init write dir    --  initialize write directory data\n",
                         "                      (description)\n",
                         "init write file   --  initialize write file data\n",
                         "                      (archive filename, description, relative offset)\n",
                         "init read         --  initialize options for reading\n",
                         "                      (source, destination, offset, cipher)\n"
                         "init password     --  initialize password for read and write operations\n",
                         "status write      --  show set write options\n",
                         "status write dir  --  show write directory contents\n",
                         "status write file --  show write file data\n",
                         "status read       --  show set read options\n",
                         "status password   --  show set password for read and write operations\n",
                         "write dir         --  write directory data to destination\n",
                         "write file        --  write file data and contents to destination\n",
                         "\n",
                         "help              --  print this info\n",
                         "quit              --  exit the command shell\n",
                         "\n"};
  info_printer(lines, (sizeof(lines) / sizeof(lines)[0]));
}
```