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

```asm
<test_check_user_token>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  movabs $0x6d61702f706d742f,%rax
  movabs $0x5858582e74736574,%rdx
  mov    %rax,(%rsp)
  mov    %rdx,0x8(%rsp)
  movl   $0x585858,0x10(%rsp)
  mov    %rsp,%rbx
  mov    %rbx,%rdi
  call   <mkstemp@plt>
  mov    %eax,%ebp
  cmp    $0xffffffff,%eax
  setne  %dil
  movzbl %dil,%edi
  call   <assert@plt>
  lea    D26(%rip),%rsi
  mov    %ebp,%edi
  call   <fdopen@plt>
  mov    %rax,%rbp
  lea    D40(%rip),%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  lea    D186(%rip),%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  lea    D102(%rip),%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  lea    D161(%rip),%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  lea    D20(%rip),%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  lea    D139(%rip),%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  lea    D171(%rip),%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  lea    D3(%rip),%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  call   <fclose@plt>
  mov    $0x1,%ecx
  lea    D182(%rip),%rdx
  lea    D187(%rip),%rbp
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <check_user_token@plt>
  cmp    $0x1,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    $0x1,%ecx
  lea    D222(%rip),%r12
  mov    %r12,%rdx
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <check_user_token@plt>
  cmp    $0x1,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    $0x1,%ecx
  lea    D219(%rip),%rdx
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <check_user_token@plt>
  cmp    $0xffffffff,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    $0x1,%ecx
  lea    D98(%rip),%rdx
  lea    D168(%rip),%rsi
  mov    %rbx,%rdi
  call   <check_user_token@plt>
  cmp    $0x1,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    $0x1,%ecx
  mov    %r12,%rdx
  lea    D83(%rip),%rsi
  mov    %rbx,%rdi
  call   <check_user_token@plt>
  cmp    $0x1,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    $0x1,%ecx
  lea    D73(%rip),%rdx
  lea    D51(%rip),%r12
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <check_user_token@plt>
  cmp    $0xfffffffe,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    $0x1,%ecx
  lea    D13(%rip),%rdx
  lea    D200(%rip),%rbp
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <check_user_token@plt>
  cmp    $0x1,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    $0x1,%ecx
  lea    D41(%rip),%rdx
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <check_user_token@plt>
  cmp    $0x1,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    $0x1,%ecx
  lea    D221(%rip),%rdx
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <check_user_token@plt>
  cmp    $0xffffffff,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    $0x1,%ecx
  lea    D1(%rip),%r13
  mov    %r13,%rdx
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <check_user_token@plt>
  cmp    $0xffffffff,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    $0x1,%ecx
  mov    %r13,%rdx
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <check_user_token@plt>
  cmp    $0xfffffffe,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    %rbx,%rdi
  call   <remove@plt>
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L4
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L4:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: tag: D26
data_type: string
name: disassemble_data
arguments: tag: D40
data_type: string
name: disassemble_data
arguments: tag: D186
data_type: string
name: disassemble_data
arguments: tag: D102
data_type: string
name: disassemble_data
arguments: tag: D161
data_type: string
name: disassemble_data
arguments: tag: D20
data_type: string
name: disassemble_data
arguments: tag: D139
data_type: string
name: disassemble_data
arguments: tag: D171
data_type: string
name: disassemble_data
arguments: tag: D3
data_type: string
name: disassemble_data
arguments: tag: D182
data_type: string
name: disassemble_data
arguments: tag: D187
data_type: string
name: disassemble_data
arguments: tag: D222
data_type: string
name: disassemble_data
arguments: tag: D219
data_type: string
name: disassemble_data
arguments: tag: D98
data_type: string
name: disassemble_data
arguments: tag: D168
data_type: string
name: disassemble_data
arguments: tag: D83
data_type: string
name: disassemble_data
arguments: tag: D73
data_type: string
name: disassemble_data
arguments: tag: D51
data_type: string
name: disassemble_data
arguments: tag: D13
data_type: string
name: disassemble_data
arguments: tag: D200
data_type: string
name: disassemble_data
arguments: tag: D41
data_type: string
name: disassemble_data
arguments: tag: D221
data_type: string
name: disassemble_data
arguments: tag: D1
data_type: string

tool: D26: w

tool: D40: # This is a comment containing foobar:foobar


tool: D186: foobar:hhhvhvhdhbid:hnhbhnhbhnhb:


tool: D102: # This is a comment in the middle


tool: D161: kaka:hdhrhbhjhvhu:hihbhdhrhbhj


tool: D20: # foo2 is a user showing up twice in the file


tool: D139: foo2:vvvvvvvvvvvv


tool: D171: bar:hnhbhnhbhnhb


tool: D3: foo2:cccccccccccc


tool: D182: hhhvhvhdhbid

tool: D187: foobar

tool: D222: hnhbhnhbhnhb

tool: D219: hnhbhnhbhnhc

tool: D98: hihbhdhrhbhj

tool: D168: kaka

tool: D83: bar

tool: D73: hdhrhbhjhvhu

tool: D51: foo

tool: D13: cccccccccccc

tool: D200: foo2

tool: D41: vvvvvvvvvvvv

tool: D221: vvvvvvvvvvcc

tool: 

assistant: ```c
void test_check_user_token(void) {
  char file[] = "/tmp/pamtest.XXXXXX";
  int fd = mkstemp(file);
  FILE *handle;
  int ret;
  assert(fd != -1);
  handle = fdopen(fd, "w");
  fprintf(handle, "# This is a comment containing foobar:foobar\n");
  fprintf(handle, "foobar:hhhvhvhdhbid:hnhbhnhbhnhb:\n");
  fprintf(handle, "# This is a comment in the middle\n");
  fprintf(handle, "kaka:hdhrhbhjhvhu:hihbhdhrhbhj\n");
  fprintf(handle, "# foo2 is a user showing up twice in the file\n");
  fprintf(handle, "foo2:vvvvvvvvvvvv\n");
  fprintf(handle, "bar:hnhbhnhbhnhb\n");
  fprintf(handle, "foo2:cccccccccccc\n");
  fclose(handle);
  ret = check_user_token(file, "foobar", "hhhvhvhdhbid", 1);
  assert(ret == 1);
  ret = check_user_token(file, "foobar", "hnhbhnhbhnhb", 1);
  assert(ret == 1);
  ret = check_user_token(file, "foobar", "hnhbhnhbhnhc", 1);
  assert(ret == -1);
  ret = check_user_token(file, "kaka", "hihbhdhrhbhj", 1);
  assert(ret == 1);
  ret = check_user_token(file, "bar", "hnhbhnhbhnhb", 1);
  assert(ret == 1);
  ret = check_user_token(file, "foo", "hdhrhbhjhvhu", 1);
  assert(ret == -2);
  ret = check_user_token(file, "foo2", "cccccccccccc", 1);
  assert(ret == 1);
  ret = check_user_token(file, "foo2", "vvvvvvvvvvvv", 1);
  assert(ret == 1);
  ret = check_user_token(file, "foo2", "vvvvvvvvvvcc", 1);
  assert(ret == -1);
  ret = check_user_token(file, "foo2", "", 1);
  assert(ret == -1);
  ret = check_user_token(file, "foo", "", 1);
  assert(ret == -2);
  remove(file);
}
```