user: 提供的汇编代码用C语言表示会是什么样子：

```asm
<separate_test>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    %rcx,-0x40(%rbp)
  lea    D8(%rip),%rax
  mov    %rax,-0x18(%rbp)
  movq   $0x0,-0x10(%rbp)
  movq   $0x0,-0x8(%rbp)
  movl   $0x0,-0x1c(%rbp)
  mov    -0x18(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strstr@plt>
  mov    %rax,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  sub    -0x28(%rbp),%rax
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    -0x30(%rbp),%rdx
  mov    %rax,(%rdx)
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  mov    -0x1c(%rbp),%edx
  mov    -0x28(%rbp),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x1c(%rbp),%eax
  cltq
  add    %rdx,%rax
  movb   $0x0,(%rax)
  addq   $0x2,-0x10(%rbp)
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strstr@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  sub    -0x10(%rbp),%rax
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    -0x38(%rbp),%rdx
  mov    %rax,(%rdx)
  mov    -0x38(%rbp),%rax
  mov    (%rax),%rax
  mov    -0x1c(%rbp),%edx
  mov    -0x10(%rbp),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  mov    -0x38(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x1c(%rbp),%eax
  cltq
  add    %rdx,%rax
  movb   $0x0,(%rax)
  addq   $0x2,-0x8(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  sub    -0x28(%rbp),%rax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    -0x40(%rbp),%rdx
  mov    %rax,(%rdx)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  mov    -0x1c(%rbp),%edx
  mov    -0x8(%rbp),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x1c(%rbp),%eax
  cltq
  add    %rdx,%rax
  movb   $0x0,(%rax)
  nop
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D8
data_type: string

tool: D8: __

assistant: ```c
void separate_test(const char *test_name, char **function, char **scenario, char **expected_result) {
  const char *delimiter = "__";
  char *iterator_1 = NULL;
  char *iterator_2 = NULL;
  uint32_t length = 0;
  iterator_1 = strstr(test_name, delimiter);
  length = iterator_1 - test_name;
  *function = malloc(sizeof(char) * (length + 1));
  strncpy(*function, test_name, length);
  (*function)[length] = '\0';
  iterator_1 += 2 * sizeof(char);
  iterator_2 = strstr(iterator_1, delimiter);
  length = iterator_2 - iterator_1;
  *scenario = malloc(sizeof(char) * (length + 1));
  strncpy(*scenario, iterator_1, length);
  (*scenario)[length] = '\0';
  iterator_2 += 2 * sizeof(char);
  length = strlen(test_name) - (iterator_2 - test_name);
  *expected_result = malloc(sizeof(char) * (length + 1));
  strncpy(*expected_result, iterator_2, length);
  (*expected_result)[length] = '\0';
}
```