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

```asm
<dtn_strerror>:
  endbr64
  cmp    $0x8d,%edi
  jg     L0
  cmp    $0x80,%edi
  jle    L46
  lea    -0x81(%rdi),%eax
  cmp    $0xc,%eax
  ja     L0
  mov    %eax,%eax
  lea    D169(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
L46:
  lea    D99(%rip),%rax
  cmp    $0xffffffff,%edi
  je     L30
  test   %edi,%edi
  jne    L0
  lea    D133(%rip),%rax
  ret
  lea    D46(%rip),%rax
  ret
  lea    D179(%rip),%rax
  ret
  lea    D152(%rip),%rax
  ret
  lea    D31(%rip),%rax
  ret
  lea    D170(%rip),%rax
  ret
  lea    D93(%rip),%rax
  ret
  lea    D82(%rip),%rax
  ret
  lea    D74(%rip),%rax
  ret
  lea    D8(%rip),%rax
  ret
  lea    D128(%rip),%rax
  ret
  lea    D142(%rip),%rax
  ret
  lea    D13(%rip),%rax
  ret
L0:
  push   %rbx
  mov    %edi,%ecx
  lea    D87(%rip),%rdx
  mov    $0x80,%esi
  lea    D75(%rip),%rbx
  mov    %rbx,%rdi
  call   <snprintf@plt>
  mov    %rbx,%rax
  pop    %rbx
  ret
  lea    D27(%rip),%rax
  ret
L30:
  ret
```

tool_calls: name: disassemble_data
arguments: label: D99
datatype: string
name: disassemble_data
arguments: label: D133
datatype: string
name: disassemble_data
arguments: label: D46
datatype: string
name: disassemble_data
arguments: label: D179
datatype: string
name: disassemble_data
arguments: label: D152
datatype: string
name: disassemble_data
arguments: label: D31
datatype: string
name: disassemble_data
arguments: label: D170
datatype: string
name: disassemble_data
arguments: label: D93
datatype: string
name: disassemble_data
arguments: label: D82
datatype: string
name: disassemble_data
arguments: label: D74
datatype: string
name: disassemble_data
arguments: label: D8
datatype: string
name: disassemble_data
arguments: label: D128
datatype: string
name: disassemble_data
arguments: label: D142
datatype: string
name: disassemble_data
arguments: label: D13
datatype: string
name: disassemble_data
arguments: label: D87
datatype: string
name: disassemble_data
arguments: label: D27
datatype: string

tool: D99: (invalid error code -1)

tool: D133: success

tool: D46: invalid argument

tool: D179: error in ipc communication

tool: D152: error connecting to server

tool: D31: operation timed out

tool: D170: payload too large

tool: D93: not found

tool: D82: internal error

tool: D74: illegal operation called after dtn_poll

tool: D8: registration already in use

tool: D128: ipc version mismatch

tool: D142: unknown ipc message type

tool: D13: no storage space

tool: D87: (unknown error %d)

tool: D27: error in xdr routines

assistant: ```c
char *dtn_strerror(int err) {
  switch (err) {
  case 0:
    return "success";
  case (128 + 1):
    return "invalid argument";
  case (128 + 2):
    return "error in xdr routines";
  case (128 + 3):
    return "error in ipc communication";
  case (128 + 4):
    return "error connecting to server";
  case (128 + 5):
    return "operation timed out";
  case (128 + 6):
    return "payload too large";
  case (128 + 7):
    return "not found";
  case (128 + 8):
    return "internal error";
  case (128 + 9):
    return "illegal operation called after dtn_poll";
  case (128 + 10):
    return "registration already in use";
  case (128 + 11):
    return "ipc version mismatch";
  case (128 + 12):
    return "unknown ipc message type";
  case (128 + 13):
    return "no storage space";
  case -1:
    return "(invalid error code -1)";
  }
  static char buf[128];
  snprintf(buf, sizeof(buf), "(unknown error %d)", err);
  return buf;
}
```