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

```asm
<nss_shadow_parse>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,(%rax)
  jmp    L210
L151:
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movzbl (%rax),%eax
  test   %al,%al
  jne    L210
  mov    $0xffffffff,%eax
  jmp    L423
L210:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  jne    L151
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movb   $0x0,(%rax)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L297
  mov    $0xffffffff,%eax
  jmp    L423
L297:
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,0x8(%rax)
  jmp    L19
L378:
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movzbl (%rax),%eax
  test   %al,%al
  jne    L19
  mov    $0xffffffff,%eax
  jmp    L423
L19:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  jne    L378
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movb   $0x0,(%rax)
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L231
  mov    $0xffffffff,%eax
  jmp    L423
L231:
  mov    -0x20(%rbp),%rax
  lea    -0x10(%rbp),%rcx
  mov    $0xa,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strtoul@plt>
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,0x10(%rax)
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  je     L177
  mov    $0xffffffff,%eax
  jmp    L423
L177:
  mov    -0x10(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  cmp    %rax,%rdx
  jne    L349
  mov    -0x18(%rbp),%rax
  movq   $0xffffffffffffffff,0x10(%rax)
L349:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L420
  mov    $0xffffffff,%eax
  jmp    L423
L420:
  mov    -0x20(%rbp),%rax
  lea    -0x10(%rbp),%rcx
  mov    $0xa,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strtoul@plt>
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,0x18(%rax)
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  je     L363
  mov    $0xffffffff,%eax
  jmp    L423
L363:
  mov    -0x10(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  cmp    %rax,%rdx
  jne    L190
  mov    -0x18(%rbp),%rax
  movq   $0xffffffffffffffff,0x18(%rax)
L190:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L79
  mov    $0xffffffff,%eax
  jmp    L423
L79:
  mov    -0x20(%rbp),%rax
  lea    -0x10(%rbp),%rcx
  mov    $0xa,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strtoul@plt>
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,0x20(%rax)
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  je     L14
  mov    $0xffffffff,%eax
  jmp    L423
L14:
  mov    -0x10(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  cmp    %rax,%rdx
  jne    L268
  mov    -0x18(%rbp),%rax
  movq   $0xffffffffffffffff,0x20(%rax)
L268:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L95
  mov    $0xffffffff,%eax
  jmp    L423
L95:
  mov    -0x20(%rbp),%rax
  lea    -0x10(%rbp),%rcx
  mov    $0xa,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strtoul@plt>
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,0x28(%rax)
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  je     L365
  mov    $0xffffffff,%eax
  jmp    L423
L365:
  mov    -0x10(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  cmp    %rax,%rdx
  jne    L298
  mov    -0x18(%rbp),%rax
  movq   $0xffffffffffffffff,0x28(%rax)
L298:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L294
  mov    $0xffffffff,%eax
  jmp    L423
L294:
  mov    -0x20(%rbp),%rax
  lea    -0x10(%rbp),%rcx
  mov    $0xa,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strtoul@plt>
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,0x30(%rax)
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  je     L367
  mov    $0xffffffff,%eax
  jmp    L423
L367:
  mov    -0x10(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  cmp    %rax,%rdx
  jne    L344
  mov    -0x18(%rbp),%rax
  movq   $0xffffffffffffffff,0x30(%rax)
L344:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L276
  mov    $0xffffffff,%eax
  jmp    L423
L276:
  mov    -0x20(%rbp),%rax
  lea    -0x10(%rbp),%rcx
  mov    $0xa,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strtoul@plt>
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,0x38(%rax)
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  je     L300
  mov    $0xffffffff,%eax
  jmp    L423
L300:
  mov    -0x10(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  cmp    %rax,%rdx
  jne    L163
  mov    -0x18(%rbp),%rax
  movq   $0xffffffffffffffff,0x38(%rax)
L163:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L171
  mov    -0x20(%rbp),%rax
  lea    -0x20(%rbp),%rcx
  mov    $0xa,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strtoul@plt>
  mov    -0x18(%rbp),%rdx
  mov    %rax,0x40(%rdx)
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L77
  mov    $0xffffffff,%eax
  jmp    L423
L171:
  mov    -0x18(%rbp),%rax
  movq   $0xffffffffffffffff,0x40(%rax)
L77:
  mov    $0x1,%eax
L423:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L148
  call   <__stack_chk_fail@plt>
L148:
  leave
  ret
```

assistant: ```c
int nss_shadow_parse(struct spwd *result, char *buf, size_t bufl) {
  result->sp_namp = buf;
  while (*buf != ':')
    if (!*buf++)
      return -1;
  *buf++ = '\0';
  if (!result->sp_namp[0])
    return -1;
  result->sp_pwdp = buf;
  while (*buf != ':')
    if (!*buf++)
      return -1;
  *buf++ = '\0';
  {
    char *endp;
    if (!*buf)
      return -1;
    result->sp_lstchg = (long)(strtoul(buf, &endp, 10));
    if (*endp != ':')
      return -1;
    if (endp == buf)
      result->sp_lstchg = (long)(-1);
    buf = endp;
  };
  {
    char *endp;
    if (!*buf)
      return -1;
    result->sp_min = (long)(strtoul(buf, &endp, 10));
    if (*endp != ':')
      return -1;
    if (endp == buf)
      result->sp_min = (long)(-1);
    buf = endp;
  };
  {
    char *endp;
    if (!*buf)
      return -1;
    result->sp_max = (long)(strtoul(buf, &endp, 10));
    if (*endp != ':')
      return -1;
    if (endp == buf)
      result->sp_max = (long)(-1);
    buf = endp;
  };
  {
    char *endp;
    if (!*buf)
      return -1;
    result->sp_warn = (long)(strtoul(buf, &endp, 10));
    if (*endp != ':')
      return -1;
    if (endp == buf)
      result->sp_warn = (long)(-1);
    buf = endp;
  };
  {
    char *endp;
    if (!*buf)
      return -1;
    result->sp_inact = (long)(strtoul(buf, &endp, 10));
    if (*endp != ':')
      return -1;
    if (endp == buf)
      result->sp_inact = (long)(-1);
    buf = endp;
  };
  {
    char *endp;
    if (!*buf)
      return -1;
    result->sp_expire = (long)(strtoul(buf, &endp, 10));
    if (*endp != ':')
      return -1;
    if (endp == buf)
      result->sp_expire = (long)(-1);
    buf = endp;
  };
  if (*buf) {
    result->sp_flag = strtoul(buf, &buf, 10);
    if (*buf)
      return -1;
  } else
    result->sp_flag = ~0ul;
  bufl = bufl;
  return 1;
}
```