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

```asm
<__dns_get_rr>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x160,%rsp
  mov    %rdi,-0x138(%rbp)
  mov    %rsi,-0x140(%rbp)
  mov    %rdx,-0x148(%rbp)
  mov    %rcx,-0x150(%rbp)
  mov    %r8,-0x158(%rbp)
  mov    %r9d,-0x15c(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x120(%rbp)
  mov    -0x158(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  and    $0xf,%eax
  test   %eax,%eax
  je     L267
  mov    $0x0,%eax
  jmp    L172
L267:
  mov    -0x158(%rbp),%rax
  add    $0xc,%rax
  mov    %rax,-0x118(%rbp)
  mov    -0x158(%rbp),%rax
  add    $0x4,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x8,%eax
  mov    %eax,%edx
  mov    -0x158(%rbp),%rax
  add    $0x5,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    %edx,%eax
  mov    %eax,-0x128(%rbp)
  mov    -0x158(%rbp),%rax
  add    $0x6,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x8,%eax
  mov    %eax,%edx
  mov    -0x158(%rbp),%rax
  add    $0x7,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    %edx,%eax
  mov    %eax,-0x124(%rbp)
  mov    -0x128(%rbp),%edx
  mov    -0x124(%rbp),%eax
  add    %edx,%eax
  cmp    $0x40,%eax
  jle    L10
  mov    $0xffffffff,%eax
  jmp    L172
L82:
  addq   $0x1,-0x118(%rbp)
L189:
  mov    -0x118(%rbp),%rax
  sub    -0x158(%rbp),%rax
  cmp    $0x1ff,%rax
  jg     L263
  mov    -0x118(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  sub    $0x1,%eax
  cmp    $0x7e,%eax
  jbe    L82
L263:
  mov    -0x118(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xc1,%al
  ja     L64
  mov    -0x118(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xc1,%al
  jne    L363
  mov    -0x118(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0xff,%al
  je     L64
L363:
  mov    -0x158(%rbp),%rax
  add    $0x1fa,%rax
  cmp    %rax,-0x118(%rbp)
  jbe    L47
L64:
  mov    $0xffffffff,%eax
  jmp    L172
L47:
  mov    -0x118(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L295
  mov    $0x6,%eax
  jmp    L345
L295:
  mov    $0x5,%eax
L345:
  add    %rax,-0x118(%rbp)
L10:
  mov    -0x128(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0x128(%rbp)
  test   %eax,%eax
  jne    L189
  jmp    L146
L28:
  addq   $0x1,-0x118(%rbp)
L140:
  mov    -0x118(%rbp),%rax
  sub    -0x158(%rbp),%rax
  cmp    $0x1ff,%rax
  jg     L96
  mov    -0x118(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  sub    $0x1,%eax
  cmp    $0x7e,%eax
  jbe    L28
L96:
  mov    -0x118(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xc1,%al
  ja     L196
  mov    -0x118(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xc1,%al
  jne    L154
  mov    -0x118(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0xff,%al
  je     L196
L154:
  mov    -0x158(%rbp),%rax
  add    $0x1fa,%rax
  cmp    %rax,-0x118(%rbp)
  jbe    L253
L196:
  mov    $0xffffffff,%eax
  jmp    L172
L253:
  mov    -0x118(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L85
  mov    $0x2,%eax
  jmp    L122
L85:
  mov    $0x1,%eax
L122:
  add    %rax,-0x118(%rbp)
  mov    -0x118(%rbp),%rax
  add    $0x8,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x8,%eax
  mov    %eax,%edx
  mov    -0x118(%rbp),%rax
  add    $0x9,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    %edx,%eax
  mov    %eax,-0x11c(%rbp)
  mov    -0x11c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x118(%rbp),%rax
  add    %rax,%rdx
  mov    -0x158(%rbp),%rax
  add    $0x200,%rax
  cmp    %rax,%rdx
  jbe    L330
  mov    $0xffffffff,%eax
  jmp    L172
L330:
  mov    -0x118(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  cmp    %eax,-0x15c(%rbp)
  jne    L235
  mov    -0x11c(%rbp),%eax
  cltq
  cmp    %rax,-0x148(%rbp)
  jb     L235
  cmpl   $0x0,0x10(%rbp)
  je     L135
  mov    -0x118(%rbp),%rax
  lea    0xa(%rax),%rdi
  mov    -0x158(%rbp),%rax
  lea    0x200(%rax),%rsi
  lea    -0x110(%rbp),%rdx
  mov    -0x158(%rbp),%rax
  mov    $0x100,%r8d
  mov    %rdx,%rcx
  mov    %rdi,%rdx
  mov    %rax,%rdi
  call   <__dn_expand@plt>
  test   %rax,%rax
  jns    L135
  mov    $0xffffffff,%eax
  jmp    L172
L135:
  cmpq   $0x0,-0x138(%rbp)
  je     L2
  cmpq   $0x0,-0x150(%rbp)
  je     L2
  cmpl   $0x0,0x10(%rbp)
  je     L349
  lea    -0x110(%rbp),%rdx
  mov    -0x138(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L102
L349:
  mov    -0x118(%rbp),%rax
  lea    0xa(%rax),%rcx
  mov    -0x11c(%rbp),%edx
  mov    -0x138(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
L102:
  mov    -0x140(%rbp),%rax
  add    %rax,-0x138(%rbp)
  subq   $0x1,-0x150(%rbp)
L2:
  addl   $0x1,-0x120(%rbp)
L235:
  mov    -0x11c(%rbp),%eax
  add    $0xa,%eax
  cltq
  add    %rax,-0x118(%rbp)
L146:
  mov    -0x124(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0x124(%rbp)
  test   %eax,%eax
  jne    L140
  mov    -0x120(%rbp),%eax
L172:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L340
  call   <__stack_chk_fail@plt>
L340:
  leave
  ret
```

assistant: ```c
int __dns_get_rr(void *dest, size_t stride, size_t maxlen, size_t limit, const unsigned char *r, int rr, int dec) {
  int qdcount, ancount;
  const unsigned char *p;
  char tmp[256];
  int found = 0;
  int len;
  if ((r[3] & 15))
    return 0;
  p = r + 12;
  qdcount = r[4] * 256 + r[5];
  ancount = r[6] * 256 + r[7];
  if (qdcount + ancount > 64)
    return -1;
  while (qdcount--) {
    while (p - r < 512 && *p - 1U < 127)
      p++;
    if (*p > 193 || (*p == 193 && p[1] > 254) || p > r + 506)
      return -1;
    p += 5 + !!*p;
  }
  while (ancount--) {
    while (p - r < 512 && *p - 1U < 127)
      p++;
    if (*p > 193 || (*p == 193 && p[1] > 254) || p > r + 506)
      return -1;
    p += 1 + !!*p;
    len = p[8] * 256 + p[9];
    if (p + len > r + 512)
      return -1;
    if (p[1] == rr && len <= maxlen) {
      if (dec && __dn_expand(r, r + 512, p + 10, tmp, sizeof tmp) < 0)
        return -1;
      if (dest && limit) {
        if (dec)
          strcpy(dest, tmp);
        else
          memcpy(dest, p + 10, len);
        dest = (char *)dest + stride;
        limit--;
      }
      found++;
    }
    p += 10 + len;
  }
  return found;
}
```