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

```asm
<load_command_line>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x308,%rsp
  mov    %edi,0x14(%rsp)
  mov    %rsi,0x8(%rsp)
  mov    %rdx,%r14
  mov    %fs:0x28,%rax
  mov    %rax,0x2f8(%rsp)
  xor    %eax,%eax
  mov    (%rsi),%rdi
  movl   $0x1,0x2c(%rsp)
  call   <strdup@plt>
  mov    %rax,(%r14)
  lea    D42(%rip),%rsi
  lea    D3(%rip),%rdi
  call   <fopen@plt>
  test   %rax,%rax
  je     L73
  mov    %rax,%rbx
  lea    0x2c(%rsp),%rdx
  mov    %r14,%rsi
  mov    %rax,%rdi
  call   <read_options@plt>
  mov    %rbx,%rdi
  call   <fclose@plt>
L73:
  cmpl   $0x1,0x14(%rsp)
  jle    L165
  mov    $0x1,%r13d
  jmp    L31
L119:
  lea    0x30(%rsp),%rsi
  mov    (%rbx),%rdi
  call   <find_load_filename@plt>
  mov    %eax,%ebp
  jmp    L88
L66:
  mov    0x8(%rsp),%rax
  mov    0x18(%rsp),%rcx
  mov    0x8(%rax,%rcx,1),%rsi
  lea    0x30(%rsp),%rdi
  call   <strcpy@plt>
L94:
  lea    0x30(%rsp),%rdi
  lea    D42(%rip),%rsi
  call   <fopen@plt>
  mov    %rax,%rbx
  test   %rax,%rax
  je     L89
L14:
  lea    0x2c(%rsp),%rdx
  mov    %r14,%rsi
  mov    %rbx,%rdi
  call   <read_options@plt>
  mov    %rbx,%rdi
  call   <fclose@plt>
L62:
  lea    0x1(%r12,%r13,1),%r13d
  cmp    %r13d,0x14(%rsp)
  jle    L165
L31:
  movslq %r13d,%r15
  lea    0x0(,%r15,8),%rax
  mov    %rax,0x18(%rsp)
  mov    0x8(%rsp),%rbx
  add    %rax,%rbx
  mov    (%rbx),%rdi
  call   <find_option@plt>
  mov    %eax,%ebp
  test   %eax,%eax
  js     L119
  movb   $0x0,0x30(%rsp)
L88:
  mov    %r13d,%edx
  mov    0x8(%rsp),%rsi
  mov    0x14(%rsp),%edi
  call   <find_parameter_count@plt>
  mov    %eax,%r12d
  cmp    $0x3a,%ebp
  jne    L163
  test   %eax,%eax
  jne    L66
  cmpb   $0x0,0x30(%rsp)
  jne    L94
  lea    0x30(%rsp),%rdi
  lea    D39(%rip),%rsi
  call   <strcpy@plt>
  jmp    L94
L89:
  lea    0x30(%rsp),%rcx
  lea    0x100(%rsp),%rbx
  lea    D18(%rip),%rdx
  lea    D11(%rip),%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  lea    D42(%rip),%rsi
  mov    %rbx,%rdi
  call   <fopen@plt>
  mov    %rax,%rbx
  test   %rax,%rax
  jne    L14
  lea    0x30(%rsp),%rsi
  lea    D13(%rip),%rdi
  call   <throw_error@plt>
  jmp    L14
L163:
  mov    (%rbx),%rdi
  mov    0x2c(%rsp),%ebp
  lea    0x1(%rbp),%eax
  mov    %eax,0x2c(%rsp)
  call   <strdup@plt>
  movslq %ebp,%rbp
  mov    %rax,(%r14,%rbp,8)
  test   %r12d,%r12d
  jle    L62
  lea    -0x1(%r12),%eax
  add    %r15,%rax
  mov    0x8(%rsp),%rcx
  lea    0x8(%rcx,%rax,8),%r15
L71:
  mov    0x8(%rbx),%rdi
  mov    0x2c(%rsp),%ebp
  lea    0x1(%rbp),%eax
  mov    %eax,0x2c(%rsp)
  call   <strdup@plt>
  movslq %ebp,%rbp
  mov    %rax,(%r14,%rbp,8)
  add    $0x8,%rbx
  cmp    %r15,%rbx
  jne    L71
  jmp    L62
L165:
  mov    0x2c(%rsp),%eax
  mov    0x2f8(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L110
  add    $0x308,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L110:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: data_tag: D42
data_type: string
name: read_data
arguments: data_tag: D3
data_type: string
name: read_data
arguments: data_tag: D39
data_type: string
name: read_data
arguments: data_tag: D18
data_type: string
name: read_data
arguments: data_tag: D11
data_type: string
name: read_data
arguments: data_tag: D13
data_type: string

tool: D42: r

tool: D3: .xbattle

tool: D39: default.xbo

tool: D18: ./xbos

tool: D11: %s/%s

tool: D13: Cannot open option file %s

assistant: ```c
int load_command_line(int argc, char *const argv[], char *command_line[]) {
  int i, j, argc_new, option_index, parameter_count;
  char filename[200], alternative_filename[500];
  FILE *fp;
  argc_new = 0;
  command_line[argc_new++] = strdup(argv[0]);
  if ((fp = fopen(".xbattle", "r")) == ((void *)0)) {
  }
  if (fp) {
    read_options(fp, command_line, &argc_new);
    fclose(fp);
  }
  for (i = 1; i < argc; i++) {
    option_index = find_option(argv[i]);
    if (option_index < 0)
      option_index = find_load_filename(argv[i], filename);
    else
      filename[0] = '\0';
    parameter_count = find_parameter_count(argc, argv, i);
    if (option_index == 58) {
      if (parameter_count == 0) {
        if (filename[0] == '\0')
          strcpy(filename, "default.xbo");
      } else
        strcpy(filename, argv[i + 1]);
      if ((fp = fopen(filename, "r")) == ((void *)0)) {
        sprintf(alternative_filename, "%s/%s", "./xbos", filename);
        if ((fp = fopen(alternative_filename, "r")) == ((void *)0))
          throw_error("Cannot open option file %s", filename);
      }
      read_options(fp, command_line, &argc_new);
      fclose(fp);
    } else {
      command_line[argc_new++] = strdup(argv[i]);
      for (j = 0; j < parameter_count; j++)
        command_line[argc_new++] = strdup(argv[i + j + 1]);
    }
    i += parameter_count;
  }
  return (argc_new);
}
```