user: 这段汇编代码用C语言表示是什么样的：

```asm
<CheckIfModuleWanted>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %rdx,-0x68(%rbp)
  mov    D6(%rip),%rax
  mov    (%rax),%edx
  mov    -0x60(%rbp),%rax
  lea    0x12(%rax),%rcx
  mov    -0x58(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <fseek@plt>
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <ReadLong@plt>
  mov    %rax,-0x38(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <ReadLong@plt>
  mov    %rax,-0x30(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <ReadLong@plt>
  mov    %rax,-0x28(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <ReadLong@plt>
  mov    %rax,-0x20(%rbp)
  mov    D6(%rip),%rax
  mov    (%rax),%edx
  mov    -0x60(%rbp),%rax
  lea    0x8(%rax),%rcx
  mov    -0x38(%rbp),%rax
  add    %rax,%rcx
  mov    -0x58(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <fseek@plt>
  mov    $0x0,%eax
  call   <ReadName@plt>
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,-0x18(%rbp)
  mov    -0x68(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L78
  mov    -0x18(%rbp),%rax
  jmp    L11
L78:
  cmpq   $0x0,-0x28(%rbp)
  je     L72
  mov    -0x20(%rbp),%rax
  mov    %rax,-0x48(%rbp)
  movq   $0x0,-0x40(%rbp)
  cmpq   $0xffffffffffffffff,-0x20(%rbp)
  jne    L53
  mov    -0x38(%rbp),%rax
  mov    %rax,-0x48(%rbp)
L53:
  mov    D6(%rip),%rax
  mov    (%rax),%edx
  mov    -0x60(%rbp),%rax
  lea    0x8(%rax),%rcx
  mov    -0x28(%rbp),%rax
  add    %rax,%rcx
  mov    -0x58(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <fseek@plt>
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x40(%rbp)
  jmp    L48
L82:
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <fgetc@plt>
  mov    %al,-0x4a(%rbp)
  addq   $0x1,-0x40(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <fgetc@plt>
  mov    %al,-0x49(%rbp)
  addq   $0x1,-0x40(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <ReadLong@plt>
  mov    %rax,-0x10(%rbp)
  addq   $0x4,-0x40(%rbp)
  mov    $0x0,%eax
  call   <ReadName@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  add    %rax,-0x40(%rbp)
  addq   $0x1,-0x40(%rbp)
  cmpb   $0x58,-0x4a(%rbp)
  je     L8
  cmpb   $0x47,-0x4a(%rbp)
  jne    L48
L8:
  mov    -0x68(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L48
  mov    -0x18(%rbp),%rax
  jmp    L11
L48:
  mov    -0x40(%rbp),%rax
  cmp    -0x48(%rbp),%rax
  jl     L82
L72:
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    $0x0,%eax
L11:
  leave
  ret
```

assistant: ```c
char *CheckIfModuleWanted(FILE *z80asmfile, long currentlibmodule, char *modname) {
  long fptr_mname, fptr_expr, fptr_name, fptr_libname;
  char *mname;
  char *name;
  fseek(z80asmfile, currentlibmodule + 4 + 4 + 8 + 2, SEEK_SET);
  fptr_mname = ReadLong(z80asmfile);
  fptr_expr = ReadLong(z80asmfile);
  fptr_name = ReadLong(z80asmfile);
  fptr_libname = ReadLong(z80asmfile);
  fseek(z80asmfile, currentlibmodule + 4 + 4 + fptr_mname, SEEK_SET);
  mname = strdup(ReadName());
  if (strcmp(mname, modname) == 0) {
    return mname;
  }
  if (fptr_name != 0) {
    long end = fptr_libname;
    long red = 0;
    if (fptr_libname == -1) {
      end = fptr_mname;
    }
    fseek(z80asmfile, currentlibmodule + 4 + 4 + fptr_name, SEEK_SET);
    red = fptr_name;
    while (red < end) {
      char scope, type;
      long temp;
      scope = fgetc(z80asmfile);
      red++;
      type = fgetc(z80asmfile);
      red++;
      temp = ReadLong(z80asmfile);
      red += 4;
      name = ReadName();
      red += strlen(name);
      red++;
      if ((scope == 'X' || scope == 'G') && strcmp(name, modname) == 0) {
        return mname;
      }
    }
  }
  free(mname);
  return NULL;
}
```