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

```asm
<dump_mem>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %rsi,0x20(%rsp)
  mov    %rdx,0x18(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  test   %rdi,%rdi
  je     L110
  mov    %rdi,%rsi
  xor    %eax,%eax
  lea    D67(%rip),%rdi
  call   <ssh_log@plt>
L106:
  lea    0x30(%rsp),%rax
  cmpq   $0x0,0x18(%rsp)
  movq   $0x0,0x8(%rsp)
  lea    D11(%rip),%r13
  mov    %rax,0x28(%rsp)
  lea    D0(%rip),%rbp
  je     L133
  nopl   0x0(%rax,%rax,1)
L48:
  xor    %eax,%eax
  lea    D12(%rip),%rdi
  mov    $0x10,%ebx
  call   <ssh_log@plt>
  mov    0x8(%rsp),%rcx
  mov    0x18(%rsp),%rax
  sub    %rcx,%rax
  cmp    %rbx,%rax
  mov    %rax,0x10(%rsp)
  cmovbe %rax,%rbx
  mov    0x20(%rsp),%rax
  xor    %r14d,%r14d
  xor    %r12d,%r12d
  lea    (%rax,%rcx,4),%r15
  mov    %rbx,(%rsp)
  mov    %r15,%rbx
  jmp    L14
  nopl   0x0(%rax)
L107:
  add    $0x1,%r12
  cmp    %r12,(%rsp)
  je     L145
L57:
  mov    %r15,%r14
L14:
  mov    (%rbx,%r12,4),%esi
  xor    %eax,%eax
  mov    %r13,%rdi
  lea    0x1(%r14),%r15
  call   <ssh_log@plt>
  mov    (%rbx,%r12,4),%eax
  mov    $0x2e,%edx
  lea    -0x20(%rax),%ecx
  cmp    $0x5f,%ecx
  cmovae %edx,%eax
  mov    %al,0x30(%rsp,%r14,1)
  cmp    $0x7,%r12
  jne    L107
  xor    %eax,%eax
  lea    D60(%rip),%rdi
  call   <ssh_log@plt>
  cmpq   $0x8,0x10(%rsp)
  movb   $0x20,0x30(%rsp,%r15,1)
  lea    0x2(%r14),%rcx
  je     L148
  mov    %rcx,%r15
  mov    $0x8,%r12d
  jmp    L57
  nopl   0x0(%rax,%rax,1)
L145:
  mov    (%rsp),%rbx
  mov    %r15,%rdx
L95:
  add    %rbx,0x8(%rsp)
  cmpq   $0xf,0x10(%rsp)
  movb   $0x0,0x30(%rsp,%rdx,1)
  jbe    L61
  jmp    L150
  nopl   0x0(%rax,%rax,1)
L19:
  cmp    $0x10,%r12
  je     L150
L93:
  mov    %r12,%rbx
L61:
  mov    %rbp,%rdi
  xor    %eax,%eax
  lea    0x1(%rbx),%r12
  call   <ssh_log@plt>
  cmp    $0x7,%rbx
  jne    L19
  lea    D60(%rip),%rdi
  xor    %eax,%eax
  call   <ssh_log@plt>
  jmp    L93
  nopl   (%rax)
L150:
  mov    0x28(%rsp),%rsi
  lea    D40(%rip),%rdi
  xor    %eax,%eax
  call   <ssh_log@plt>
  mov    0x8(%rsp),%rdx
  cmp    %rdx,0x18(%rsp)
  ja     L48
L133:
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L27
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L148:
  mov    (%rsp),%rbx
  mov    %rcx,%rdx
  jmp    L95
L110:
  mov    %edx,%esi
  lea    D25(%rip),%rdi
  call   <ssh_log@plt>
  jmp    L106
L27:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D67
type_guessed: string
name: disassemble_data
arguments: data_label: D11
type_guessed: string
name: disassemble_data
arguments: data_label: D0
type_guessed: string
name: disassemble_data
arguments: data_label: D12
type_guessed: string
name: disassemble_data
arguments: data_label: D60
type_guessed: string
name: disassemble_data
arguments: data_label: D40
type_guessed: string
name: disassemble_data
arguments: data_label: D25
type_guessed: string

tool: D67: %s (%u bytes)


tool: D11: %02x 

tool: D0:    

tool: D12: | 

tool: D60:  

tool: D40: | %-17s |


tool: D25: * dumping %u bytes


assistant: ```c
void dump_mem(const char *label, const void *data, size_t len) {
  char str[18];
  size_t cur, str_len;
  if (label == NULL)
    ssh_log("* dumping %u bytes\n", (unsigned int)len);
  else
    ssh_log("%s (%u bytes)\n", label, (unsigned int)len);
  cur = 0;
  while (cur < len) {
    const uint8_t *line = (const uint8_t *)data + cur;
    size_t i, si;
    ssh_log("| ");
    str_len = (len - cur > 16) ? 16 : len - cur;
    for (si = i = 0; i < str_len; i++) {
      ssh_log("%02x ", line[i]);
      str[si++] = (line[i] >= 32 && line[i] < 127) ? line[i] : '.';
      if (i == 7) {
        ssh_log(" ");
        str[si++] = ' ';
      }
    }
    str[si++] = '\0';
    cur += str_len;
    for (i = str_len; i < 16; i++) {
      ssh_log("   ");
      if (i == 7)
        ssh_log(" ");
    }
    ssh_log("| %-17s |\n", str);
  }
}
```