user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<shift_cipher>:
  endbr64
  push   %r14
  lea    D106(%rip),%r14
  push   %r13
  mov    %rdi,%r13
  push   %r12
  mov    %r13,%rdi
  xor    %r12d,%r12d
  push   %rbp
  push   %rbx
  sub    $0xf0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0xe8(%rsp)
  xor    %eax,%eax
  lea    D85(%rip),%rax
  mov    %r14,0x10(%rsp)
  mov    %rax,0x18(%rsp)
  lea    D75(%rip),%rax
  mov    %rax,0x20(%rsp)
  lea    D70(%rip),%rax
  mov    %rax,0x28(%rsp)
  lea    D236(%rip),%rax
  mov    %rax,0x30(%rsp)
  lea    D159(%rip),%rax
  mov    %rax,0x38(%rsp)
  lea    D72(%rip),%rax
  mov    %rax,0x40(%rsp)
  lea    D98(%rip),%rax
  mov    %rax,0x48(%rsp)
  lea    D208(%rip),%rax
  mov    %rax,0x50(%rsp)
  lea    D183(%rip),%rax
  mov    %rax,0x58(%rsp)
  lea    D17(%rip),%rax
  mov    %rax,0x60(%rsp)
  lea    D9(%rip),%rax
  mov    %rax,0x68(%rsp)
  lea    D82(%rip),%rax
  mov    %rax,0x70(%rsp)
  lea    D96(%rip),%rax
  mov    %rax,0x78(%rsp)
  lea    D225(%rip),%rax
  mov    %rax,0x80(%rsp)
  lea    D14(%rip),%rax
  mov    %rax,0x88(%rsp)
  lea    D257(%rip),%rax
  mov    %rax,0x90(%rsp)
  lea    D259(%rip),%rax
  mov    %rax,0x98(%rsp)
  lea    D42(%rip),%rax
  mov    %rax,0xa0(%rsp)
  lea    D241(%rip),%rax
  mov    %rax,0xa8(%rsp)
  lea    D163(%rip),%rax
  mov    %rax,0xb0(%rsp)
  lea    D120(%rip),%rax
  mov    %rax,0xb8(%rsp)
  lea    D265(%rip),%rax
  mov    %rax,0xc0(%rsp)
  lea    D186(%rip),%rax
  mov    %rax,0xc8(%rsp)
  lea    D246(%rip),%rax
  mov    %rax,0xd0(%rsp)
  lea    D164(%rip),%rax
  mov    %rax,0xd8(%rsp)
  call   <strlen@plt>
  sub    $0x1,%eax
  cmp    %r12d,%eax
  jle    L13
  nopl   0x0(%rax)
L30:
  movzbl 0x0(%r13,%r12,1),%eax
  mov    $0x1,%ebx
  mov    %r14,%rsi
  lea    0xf(%rsp),%rbp
  mov    %al,0xf(%rsp)
  jmp    L14
  nopl   0x0(%rax)
L59:
  cmp    $0x1a,%rbx
  je     L56
  mov    0x10(%rsp,%rbx,8),%rsi
  add    $0x1,%rbx
L14:
  mov    $0x1,%edx
  mov    %rbp,%rdi
  call   <strncmp@plt>
  mov    %ebx,%edx
  test   %eax,%eax
  jne    L59
  mov    %ebx,%eax
  imul   $0x4ec4ec4f,%rax,%rax
  shr    $0x23,%rax
  imul   $0x1a,%eax,%eax
  sub    %eax,%edx
  movslq %edx,%rdx
  mov    0x10(%rsp,%rdx,8),%rax
  movzbl (%rax),%eax
  mov    %al,0x0(%r13,%r12,1)
L56:
  mov    %r13,%rdi
  add    $0x1,%r12
  call   <strlen@plt>
  sub    $0x1,%eax
  cmp    %r12d,%eax
  jg     L30
L13:
  mov    0xe8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L27
  add    $0xf0,%rsp
  lea    D227(%rip),%rdi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  jmp    10b0 <printf@plt>
L27:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: tag: D106
datatype: string
name: unpack_data
arguments: tag: D85
datatype: string
name: unpack_data
arguments: tag: D75
datatype: string
name: unpack_data
arguments: tag: D70
datatype: string
name: unpack_data
arguments: tag: D236
datatype: string
name: unpack_data
arguments: tag: D159
datatype: string
name: unpack_data
arguments: tag: D72
datatype: string
name: unpack_data
arguments: tag: D98
datatype: string
name: unpack_data
arguments: tag: D208
datatype: string
name: unpack_data
arguments: tag: D183
datatype: string
name: unpack_data
arguments: tag: D17
datatype: string
name: unpack_data
arguments: tag: D9
datatype: string
name: unpack_data
arguments: tag: D82
datatype: string
name: unpack_data
arguments: tag: D96
datatype: string
name: unpack_data
arguments: tag: D225
datatype: string
name: unpack_data
arguments: tag: D14
datatype: string
name: unpack_data
arguments: tag: D257
datatype: string
name: unpack_data
arguments: tag: D259
datatype: string
name: unpack_data
arguments: tag: D42
datatype: string
name: unpack_data
arguments: tag: D241
datatype: string
name: unpack_data
arguments: tag: D163
datatype: string
name: unpack_data
arguments: tag: D120
datatype: string
name: unpack_data
arguments: tag: D265
datatype: string
name: unpack_data
arguments: tag: D186
datatype: string
name: unpack_data
arguments: tag: D246
datatype: string
name: unpack_data
arguments: tag: D164
datatype: string
name: unpack_data
arguments: tag: D227
datatype: string

tool: D106: a

tool: D85: b

tool: D75: c

tool: D70: d

tool: D236: e

tool: D159: f

tool: D72: g

tool: D98: h

tool: D208: i

tool: D183: j

tool: D17: k

tool: D9: l

tool: D82: m

tool: D96: n

tool: D225: o

tool: D14: p

tool: D257: q

tool: D259: r

tool: D42: s

tool: D241: t

tool: D163: u

tool: D120: v

tool: D265: w

tool: D186: x

tool: D246: y

tool: D164: z

tool: D227: 


assistant: ```c
void shift_cipher(char message[]) {
  char *letters[] = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};
  int i;
  int j;
  for (j = 0; j < (strlen(message) - 1); j++) {
    char message_char = message[j];
    int shifted_found = 0;
    for (i = 0; i < 26; i++) {
      if (shifted_found)
        break;
      int result = strcmp(&message_char, letters[i]);
      if (!strncmp(&message_char, letters[i], 1)) {
        int shifted_index = (i + 1) % 26;
        message[j] = *letters[shifted_index];
        shifted_found = 1;
        break;
      } else if ((i + 1) == 26) {
      }
    }
  }
  printf("\n");
}
```