user: Demonstrate the C code that generates the assembly output below:

```asm
<droits>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    $0x4,%edi
  call   <malloc@plt>
  mov    %rax,-0x10(%rbp)
  movl   $0x0,-0x18(%rbp)
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x14(%rbp)
  mov    D64(%rip),%rax
  mov    (%rax),%eax
  and    -0x14(%rbp),%eax
  mov    -0x10(%rbp),%rcx
  lea    -0x18(%rbp),%rdx
  mov    %rcx,%r8
  mov    %rdx,%rcx
  mov    $0x2d,%edx
  mov    $0x72,%esi
  mov    %eax,%edi
  call   <traiter@plt>
  mov    D74(%rip),%rax
  mov    (%rax),%eax
  and    -0x14(%rbp),%eax
  mov    -0x10(%rbp),%rcx
  lea    -0x18(%rbp),%rdx
  mov    %rcx,%r8
  mov    %rdx,%rcx
  mov    $0x2d,%edx
  mov    $0x77,%esi
  mov    %eax,%edi
  call   <traiter@plt>
  mov    D56(%rip),%rax
  mov    (%rax),%eax
  and    -0x14(%rbp),%eax
  mov    -0x10(%rbp),%rcx
  lea    -0x18(%rbp),%rdx
  mov    %rcx,%r8
  mov    %rdx,%rcx
  mov    $0x2d,%edx
  mov    $0x78,%esi
  mov    %eax,%edi
  call   <traiter@plt>
  mov    D35(%rip),%rax
  mov    (%rax),%eax
  and    -0x14(%rbp),%eax
  mov    -0x10(%rbp),%rcx
  lea    -0x18(%rbp),%rdx
  mov    %rcx,%r8
  mov    %rdx,%rcx
  mov    $0x2d,%edx
  mov    $0x72,%esi
  mov    %eax,%edi
  call   <traiter@plt>
  mov    D16(%rip),%rax
  mov    (%rax),%eax
  and    -0x14(%rbp),%eax
  mov    -0x10(%rbp),%rcx
  lea    -0x18(%rbp),%rdx
  mov    %rcx,%r8
  mov    %rdx,%rcx
  mov    $0x2d,%edx
  mov    $0x77,%esi
  mov    %eax,%edi
  call   <traiter@plt>
  mov    D28(%rip),%rax
  mov    (%rax),%eax
  and    -0x14(%rbp),%eax
  mov    -0x10(%rbp),%rcx
  lea    -0x18(%rbp),%rdx
  mov    %rcx,%r8
  mov    %rdx,%rcx
  mov    $0x2d,%edx
  mov    $0x78,%esi
  mov    %eax,%edi
  call   <traiter@plt>
  mov    D20(%rip),%rax
  mov    (%rax),%eax
  and    -0x14(%rbp),%eax
  mov    -0x10(%rbp),%rcx
  lea    -0x18(%rbp),%rdx
  mov    %rcx,%r8
  mov    %rdx,%rcx
  mov    $0x2d,%edx
  mov    $0x72,%esi
  mov    %eax,%edi
  call   <traiter@plt>
  mov    D9(%rip),%rax
  mov    (%rax),%eax
  and    -0x14(%rbp),%eax
  mov    -0x10(%rbp),%rcx
  lea    -0x18(%rbp),%rdx
  mov    %rcx,%r8
  mov    %rdx,%rcx
  mov    $0x2d,%edx
  mov    $0x77,%esi
  mov    %eax,%edi
  call   <traiter@plt>
  mov    D13(%rip),%rax
  mov    (%rax),%eax
  and    -0x14(%rbp),%eax
  mov    -0x10(%rbp),%rcx
  lea    -0x18(%rbp),%rdx
  mov    %rcx,%r8
  mov    %rdx,%rcx
  mov    $0x2d,%edx
  mov    $0x78,%esi
  mov    %eax,%edi
  call   <traiter@plt>
  mov    -0x18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0x10(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L3
  call   <__stack_chk_fail@plt>
L3:
  leave
  ret
```

assistant: ```c
char *droits(struct stat *pstat) {
  mode_t mode;
  char *modes = malloc(sizeof(10));
  int indice_mode = 0;
  mode = pstat->st_mode;
  traiter(mode & S_IRUSR, 'r', '-', &indice_mode, modes);
  traiter(mode & S_IWUSR, 'w', '-', &indice_mode, modes);
  traiter(mode & S_IXUSR, 'x', '-', &indice_mode, modes);
  traiter(mode & S_IRGRP, 'r', '-', &indice_mode, modes);
  traiter(mode & S_IWGRP, 'w', '-', &indice_mode, modes);
  traiter(mode & S_IXGRP, 'x', '-', &indice_mode, modes);
  traiter(mode & S_IROTH, 'r', '-', &indice_mode, modes);
  traiter(mode & S_IWOTH, 'w', '-', &indice_mode, modes);
  traiter(mode & S_IXOTH, 'x', '-', &indice_mode, modes);
  modes[indice_mode] = '\0';
  return modes;
}
```