user: 请将以下的汇编代码转换成C语言代码：

```asm
<EthProto2Str>:
  endbr64
  mov    %edi,%eax
  push   %rbx
  mov    %rsi,%rbx
  sar    $0x10,%eax
  cmp    $0x90,%al
  ja     L5
  lea    D60(%rip),%rcx
  movzbl %al,%edx
  movslq (%rcx,%rdx,4),%rax
  add    %rcx,%rax
  notrack jmp *%rax
  nopl   (%rax)
  lea    D217(%rip),%rax
  pop    %rbx
  ret
  nopl   0x0(%rax)
L5:
  movzwl %di,%eax
  add    $0xffffff80,%eax
  cmp    $0x5,%eax
  ja     L4
  lea    D221(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D190(%rip),%rax
  pop    %rbx
  ret
  lea    D206(%rip),%rax
  pop    %rbx
  ret
  lea    D327(%rip),%rax
  pop    %rbx
  ret
  lea    D41(%rip),%rax
  pop    %rbx
  ret
  lea    D341(%rip),%rax
  pop    %rbx
  ret
  lea    D108(%rip),%rax
  pop    %rbx
  ret
  lea    D313(%rip),%rax
  pop    %rbx
  ret
  lea    D64(%rip),%rax
  pop    %rbx
  ret
  lea    D15(%rip),%rax
  pop    %rbx
  ret
  lea    D4(%rip),%rax
  pop    %rbx
  ret
  lea    D306(%rip),%rax
  pop    %rbx
  ret
  lea    D208(%rip),%rax
  pop    %rbx
  ret
  lea    D268(%rip),%rax
  pop    %rbx
  ret
  lea    D2(%rip),%rax
  pop    %rbx
  ret
  lea    D163(%rip),%rax
  pop    %rbx
  ret
  lea    D260(%rip),%rax
  pop    %rbx
  ret
  lea    D130(%rip),%rax
  pop    %rbx
  ret
  lea    D231(%rip),%rax
  pop    %rbx
  ret
  lea    D273(%rip),%rax
  pop    %rbx
  ret
  lea    D154(%rip),%rax
  pop    %rbx
  ret
  lea    D146(%rip),%rax
  pop    %rbx
  ret
  lea    D58(%rip),%rax
  pop    %rbx
  ret
  lea    D56(%rip),%rax
  pop    %rbx
  ret
  lea    D145(%rip),%rax
  pop    %rbx
  ret
  lea    D22(%rip),%rax
  pop    %rbx
  ret
  lea    D280(%rip),%rax
  pop    %rbx
  ret
  lea    D69(%rip),%rax
  pop    %rbx
  ret
  lea    D24(%rip),%rax
  pop    %rbx
  ret
  lea    D14(%rip),%rax
  pop    %rbx
  ret
  lea    D292(%rip),%rax
  pop    %rbx
  ret
  lea    D328(%rip),%rax
  pop    %rbx
  ret
L4:
  mov    %edi,%edx
  lea    D264(%rip),%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  mov    %rbx,%rax
  pop    %rbx
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D217
type_infered: string
name: extract_symbolic_data
arguments: label: D190
type_infered: string
name: extract_symbolic_data
arguments: label: D206
type_infered: string
name: extract_symbolic_data
arguments: label: D327
type_infered: string
name: extract_symbolic_data
arguments: label: D41
type_infered: string
name: extract_symbolic_data
arguments: label: D341
type_infered: string
name: extract_symbolic_data
arguments: label: D108
type_infered: string
name: extract_symbolic_data
arguments: label: D313
type_infered: string
name: extract_symbolic_data
arguments: label: D64
type_infered: string
name: extract_symbolic_data
arguments: label: D15
type_infered: string
name: extract_symbolic_data
arguments: label: D4
type_infered: string
name: extract_symbolic_data
arguments: label: D306
type_infered: string
name: extract_symbolic_data
arguments: label: D208
type_infered: string
name: extract_symbolic_data
arguments: label: D268
type_infered: string
name: extract_symbolic_data
arguments: label: D2
type_infered: string
name: extract_symbolic_data
arguments: label: D163
type_infered: string
name: extract_symbolic_data
arguments: label: D260
type_infered: string
name: extract_symbolic_data
arguments: label: D130
type_infered: string
name: extract_symbolic_data
arguments: label: D231
type_infered: string
name: extract_symbolic_data
arguments: label: D273
type_infered: string
name: extract_symbolic_data
arguments: label: D154
type_infered: string
name: extract_symbolic_data
arguments: label: D146
type_infered: string
name: extract_symbolic_data
arguments: label: D58
type_infered: string
name: extract_symbolic_data
arguments: label: D56
type_infered: string
name: extract_symbolic_data
arguments: label: D145
type_infered: string
name: extract_symbolic_data
arguments: label: D22
type_infered: string
name: extract_symbolic_data
arguments: label: D280
type_infered: string
name: extract_symbolic_data
arguments: label: D69
type_infered: string
name: extract_symbolic_data
arguments: label: D24
type_infered: string
name: extract_symbolic_data
arguments: label: D14
type_infered: string
name: extract_symbolic_data
arguments: label: D292
type_infered: string
name: extract_symbolic_data
arguments: label: D328
type_infered: string
name: extract_symbolic_data
arguments: label: D264
type_infered: string

tool: D217: DNS

tool: D190: NTP

tool: D206: SFTP

tool: D327: HTTPS

tool: D41: IMAP3

tool: D341: TFTP

tool: D108: UDP

tool: D313: SSH

tool: D64: TCP

tool: D15: SNMP

tool: D4: NETBIOSSSN

tool: D306: NETBIOSDGM

tool: D208: NETBIOSNS

tool: D268: IRC

tool: D2: BGP

tool: D163: RPC

tool: D260: POP3

tool: D130: HTTP

tool: D231: BOOTPC

tool: D273: BOOTPS

tool: D154: VNC

tool: D146: SMTP

tool: D58: TELNET

tool: D56: QUIC

tool: D145: FTPDATA

tool: D22: FTPCMD

tool: D280: IP

tool: D69: IPv6

tool: D24: PPPOE_Discover

tool: D14: PPPOE_SESSION

tool: D292: RARP

tool: D328: ARP

tool: D264: 0x%4x

assistant: ```c
const char *EthProto2Str(uint32_t proto, char *cache) {
  uint16_t ipflag = (proto >> 16) & 0xff;
  uint16_t ethproto = proto & 0xffff;
  switch (ipflag) {
  case (0x40 + 1):
    return "FTPDATA";
    ;
  case (0x40 + 2):
    return "FTPCMD";
    ;
  case (0x40 + 3):
    return "SSH";
    ;
  case (0x40 + 4):
    return "TELNET";
    ;
  case (0x40 + 5):
    return "SMTP";
    ;
  case (0x40 + 10):
    return "DNS";
    ;
  case (0x40 + 11):
    return "BOOTPS";
    ;
  case (0x40 + 12):
    return "BOOTPC";
    ;
  case (0x40 + 20):
    return "HTTP";
    ;
  case (0x40 + 21):
    return "POP3";
    ;
  case (0x40 + 22):
    return "RPC";
    ;
  case (0x40 + 23):
    return "SFTP";
    ;
  case (0x40 + 24):
    return "NTP";
    ;
  case (0x40 + 25):
    return "NETBIOSNS";
    ;
  case (0x40 + 26):
    return "NETBIOSDGM";
    ;
  case (0x40 + 27):
    return "NETBIOSSSN";
    ;
  case (0x40 + 30):
    return "SNMP";
    ;
  case (0x40 + 35):
    return "BGP";
    ;
  case (0x40 + 36):
    return "IRC";
    ;
  case (0x40 + 37):
    return "IMAP3";
    ;
  case (0x40 + 38):
    return "HTTPS";
    ;
  case (0x40 + 80):
    return "VNC";
    ;
  case (0x0 + 11):
    return "DNS";
  case (0x0 + 12):
    return "QUIC";
  case (0x0 + 10):
    return "TFTP";
  case (0x0 + 1):
    return "UDP";
  case (0x40):
    return "TCP";
  default:
    break;
  }
  switch (ethproto) {
  case ETH_P_IP:
    return "IP";
  case ETH_P_IPV6:
    return "IPv6";
  case ETH_P_ARP:
    return "ARP";
  case ETH_P_RARP:
    return "RARP";
  case ETH_P_PPP_DISC:
    return "PPPOE_Discover";
  case ETH_P_PPP_SES:
    return "PPPOE_SESSION";
  default:
    sprintf(cache, "0x%4x", proto);
    break;
  }
  return cache;
}
```